전체 글237 [소프트웨어 아키텍처 101] 챕터 1. 서론 1.1 소프트웨어 아키텍처란? 소프트웨어 아키텍처는 아키텍처 특성, 아키텍처 결정, 설계 원칙, 시스템의 구조로 구성된다. 시스템의 구조란 시스템이 구현된 (마이크로서비스, 레이어드, 마이크로커널 같은) 아키텍처 스타일들의 종류를 말한다. 시스템의 아키텍처를 완전히 이해하려면 아키텍처 특성, 아키텍처 결정, 설계 원칙도 알아야 한다. 아키텍처 특성은 소프트웨어 아키텍처를 다른 관점에서 바라본 것으로, 일반적으로 시스템의 기능과 직교하는 시스팀템의 성공 기준을 결정한다. 아래와 같은 특성이 시스템 기능에 관한 지식을 필요로 하는 것은 아니지만, 시스템이 올바르게 동작하기 위해서는 반드시 필요하다. 가용성 신뢰성 시험성 확장성 보안 민첩성 내고장성 탄력성 복구성 성능 배포성 학습성 아키텍처 결정은 시스템 구.. CS/기타 2024. 1. 12. 2023년 회고록, "나에게 맞는 옷을 찾은 해" 올 한 해, 제가 생각으로만 가지고 있었던, 해보고 싶었던 것들을 조금씩 해봤던 한 해 였습니다. 결과적으로 올해 했던 여러 경험들이, 제가 원하는 저의 미래를 앞으로 더 뚜렷하게 그려볼 수 있게 되었습니다. 2개의 프로젝트, 풀스택 개발 가장 큰 변화는 1월달부터 4월달까지의 기록일텐데요. 페오펫이란 펫 테크 플랫폼 회사에서 정말 치열하게 일했습니다. 개발 인력이 부족한 상황에서 타이트한 마감 기한을 맞추기 위해서 주말은 물론이고 평일 새벽까지 일에 몰입해서 일했습니다. 개발 뿐만 아니라, 운영 업무와 기존 레거시 프로젝트에 신규 기능을 추가하는 일까지. 이 때 겪었던 경험들은, 인생에 있어서 다시 하기 어려운 소중한 성장의 경험이었다고 생각합니다. 또 이 기간동안 백엔드 개발자로서 겪을 수 있는 다양.. 생각정리/회고 2024. 1. 4. [Web] SpringBoot 환경에서의 세션 인증 방식과 토큰 인증 방식 서론 오늘은 인증과 인가 기능을 구현할 때, 꼭 짚고 넘어가야 하는 세션 인증 방식과 토큰 인증 방식의 장/단점을 비교해보겠습니다. 그리고 스프링에선 어떻게 구현할 수 있는지 간략하게 소개드리겠습니다. 대상 독자 인증/인가 기능을 처음 구현해보시는 분들, 이전에 인증/인가 기능을 구현해봤지만 잘 기억이 나질 않는 분들, 이와 관련된 이론적 지식들을 알고 싶은 분들에게 이 글을 추천합니다. 본론 인증과 인가 인증이란 유저를 식별할 수 있는 정보(ex - ID/PW, 소셜로그인 정보)를 통해, 유저가 적합한 유저인지 판단하는 방법을 말합니다. 인가란 인증된 유저에게 권한을 부여하여, 해당 프로그램 기능에 접근할 수 있도록 허용하는 것을 말합니다. 반대로 권한이 없는 유저는 접근하지 못하도록 막는 것을 말합니.. Web 2023. 12. 13. [기타] SpringBoot 환경에서 Swagger 3.0을 적용하는 방법 오늘은 SpringBoot 환경에서 Swagger를 적용하는 방법에 관해서 알아보도록 하겠습니다. 정의 Swagger란 개발자가 REST 웹 서비스를 설계, 빌드, 테스트, 문서화하는 일을 도와주는 오픈 소스 소프트웨어 프레임워크입니다. Spring Boot 3.0 이상 버젼에서는? Spring Boot 3 부터는 별도의 설정 없이, 아래 의존성만 추가해주면 자동으로 설정이 완료됩니다. 설치 후, 서버 구동한 뒤, [URL]/swagger-ui/index.html에서 확인 가능합니다. implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' Spring Boot 3.0 이하 버젼에서는? (Gradle) Swagger 3.0 기준으로.. 기타 2023. 12. 2. [Blog] 개발 블로그를 시작하는 방법 얼마 전, 블로그 누적 조회수가 10만을 넘었습니다. 3년째 운영해온 입장에서 꽤 상징적이었는데요, 앞으로 더 열심히 글을 적어봐야겠다는 생각이 들며 동시에 어떤 생각으로 운영해왔는지 또 앞으로 어떻게 운영할 것인지 생각을 정리해봤습니다. 저보다 이미 좋은 성과를 거두고 계시고, 더 오랫동안 블로그를 운영해오고 계신 분들은 이 글이 큰 도움이 되진 않으실 것 같습니다. 재미로 봐주시는 건 환영입니다. 기술 블로그를 운영하게 된 계기 먼저 이렇게 묻고 싶습니다. 개발자인 우리는 왜 글을 써야 할까요? 그에 대한 답을 이 영상으로 갈음하고 싶습니다. https://www.youtube.com/watch?v=V9AGvwPmnZU&ab_channel=EO%EC%9D%B4%EC%98%A4 저는 개발자를 시작할 때.. 생각정리 2023. 11. 28. [Alogorithm] 알고리즘 공부를 시작하는 올바른 방법 본 글은 알고리즘을 이제 막 공부하기 시작한 분들에게 적합한 글입니다. 이제 막 알고리즘에 눈 뜬 입장에서, 처음 알고리즘을 접하는 분들께 드리는 조언을 담아보았습니다. 저보다 알고리즘에 대해 잘하고 자신 있으신 분들은 이 글이 큰 도움이 되진 않으실 것 같습니다. 재미로 봐주시는 건 환영입니다. 나의 코딩테스트 실패 경험은 현재 진행형코딩테스트, 알고리즘.. 항상 도전과 이직의 발목을 잡았던 것은 코딩 테스트였다. 처음 제대로 된 알고리즘 테스트를 본 건, 2022년 봄이었다. 프론트엔드 개발자로서 첫 취업하기 전에도 본 적은 있지만, 코딩테스트를 보는 회사에 합격한 것은 아니었으니까. 창업에 관심이 많던 나는 소프트웨어 마에스트로 과정에 지원했지만, 코딩 테스트라는 허들 앞에 좌절했다. 그 때 당시,.. CS/알고리즘 2023. 11. 27. [자료구조] 헷갈리는 트리 종류 정리 이진 트리 (Binary Tree) 이진트리는 각각의 노드가 최대 두 개의 자식 노드를 가지는 트리 자료구조입니다. 이진트리에는 여러 종류가 있습니다. 정이진트리(Full binary tree), 포화이진트리(Perfect binary tree), 완전이진트리(Complete binary tree), 균형이진트리(Balanced binary tree), 이진 탐색 트리 (Binary Search Tree), 균형 이진 트리, AVL Tree 등이 있습니다. 이 중에서도 이진 탐색 트리, 균형 이진 트리, 균형 이진 탐색 트리, AVL Tree에 관해 알아보도록 하겠습니다. 이진 탐색 트리 (Binary Search Tree) 이진 트리 기반의 탐색을 위한 자료구조입니다. 특성으로는 모든 원소의 키는 유일.. CS/자료구조 2023. 10. 30. [MySQL] MVCC(Multi Version Concurrency Control)란 학습해야 하는 이유 MVCC를 이해해야 트랜잭션 격리 수준에 따른 MySQL 내부 동작 원리에 대해서 알 수 있기 때문입니다. MVCC를 이해하기 위해선, Undo Log에 대해 알아야 합니다. 또 Undo Log와 헷갈릴 수 있는 Redo Log에 대해서도 알아봅시다. Redo Log와 Undo Log는 MySQL 스토리지 엔진 내에 존재하는 데이터 영역입니다. Redo Log 정의 DDL 또는 DML 문장에 의해 데이터베이스에 저장된 값 또는 테이더베이스 구조에 변경사항이 생기는 경우 변경 정보를 보관하는 메모리 영역입니다. Redo Log가 필요한 이유 기본적으로 DB에서 데이터 변경 작업은 부하가 큰 작업입니다. 많은 경우 변경 대상인 데이터가 순차적으로 위치하지 않고 디스크에 랜덤하게 존재하기 .. DB/MySQL 2023. 10. 28. [OS] 동기와 비동기, 블록과 논블럭의 차이 오늘은 동기, 비동기 그리고 블록과 논블록의 차이점에 대해서 알아보도록 하겠습니다. 동기와 비동기의 차이 동기 (synchronous) 정의 요청에 대해 결과값을 기다렸다 처리하는 것을 말합니다. 여기서 요청이란 API, 함수에 대한 호출을 말합니다. 장점 설계가 매우 간단하고 직관적이다. 단점 결과가 주어질 때까지 기다려야 하므로, 여러 요청들을 빠르게 처리할 수 없다. 비동기 (asynchronous) 정의 요청의 결과값을 기다리지 않고 처리하는 것을 말합니다. 장점 요청을 보낸 직후, 바로 다른 작업을 수행할 수 있습니다. 단점 동기식보다 설계가 복잡합니다. 블록과 논블록의 차이 블록 (block) 특징 동기에서 파생된 개념입니다. 정의 동기로 처리될 때, 응답을 대기해야 합니다. 이 때, 쓰레드에.. CS/OS 2023. 10. 16. [Python] Python에서 정렬하는 방법 (sort, sorted, heapq) 파이썬으로 코딩 테스트 문제를 풀다보면, 다양한 상황에서 정렬을 활용해야 합니다. 문제를 손쉽게 풀 수 있도록 도와줬던 sort/sorted 함수 활용 방법에 관해 알아보겠습니다. sort 함수를 활용한 정렬 방법 이용하기 내장함수 리스트.sort 함수 사용 혹은 sorted(리스트) 함수 사용하면 쉽게 정렬할 수 있습니다. 두 함수 간 차이점은 전자는 원본 리스트에 수정이 일어나고, 후자는 수정이 일어나지 않는다는 점입니다. 또한 기본적으로 오름차순으로 정렬됩니다. numbers = [5, 3, 2, 3] numbers.sort() # None 값 리턴 print(numbers) # [2, 3, 3, 5] (원본 배열이 변경됨) new_numbers = sorted(numbers) # 새로운 배열 리턴.. Language/Python 2023. 10. 11. [Java] 동기화란 무엇인가? (1) 상호배제 동기화 방법 (자바에선 멀티 스레드 환경에서 어떻게 동기화를 할까?) 멀티 스레드 혹은 멀티 프로세스 환경에서 동기화를 보장하려면, 실행 순서 제어와 상호 배제가 필요합니다. 실행 순서 제어란 공유 자원에 대한 작업이 순서대로 작업되도록 보장하는 것입니다. 상호 배제란 동시에 접근해서는 안되는 자원(공유 자원)에 하나만 접근하도록 보장하는 것입니다. 자바에선 동기화를 보장하기 위해, 모니터 인터페이스를 제공합니다. 모니터는 프로그래밍 언어 수준에서 동기화를 지원합니다. 자바의 각 객체는 모니터 락을 소유하고 있으며, 각 스레드는 이 모니터 락을 잠그거나 해제할 수 있습니다. 한 번에 하나의 스레드만이 모니터의 잠금을 유지할 수 있습니다. 해당 모니터를 잠그려는 다른 스레드는 해당 모니터에서 잠금을 얻을 .. Language/Java & Kotlin 2023. 10. 3. [GIT] .gitignore가 작동하지 않을 때 대처 방법 .gitignore에 제외하고 싶은 파일을 추가했음에도 반영되지 않는 경우가 있습니다.그럴 땐 .git에 남아있는 캐시 때문인데요, 캐시를 제거해주기 위해선 아래와 같이 입력해주면 됩니다.git rm -rf --cached .캐시를 제거하면 기존에 staging 영역에 있던 파일들이 unstaged 되므로, git add . 를 해줍니다.이상으로 글을 마치겠습니다. CS/Git 2023. 6. 23. 이전 1 ··· 7 8 9 10 11 12 13 ··· 20 다음 반응형