개발
-
DB Lock개발/기타 2025. 5. 4. 23:57
최근 간단한 예약 서비스 과제를 진행하면서, JPA의 Lock을 직접 다뤄야 하는 상황이 생겼다. @Transactional만으로는 동시성 문제가 해결되지 않았고 비관적 락(Pessimistic Lock) 을 적용해 해결했다.이후 해당 내용에 대해 좀 더 자세히 알아보고자 글을 작성하게 되었다. 대표적으로 사용하는 DB중 하나인 MySQL 기준으로 작성할 예정이며 아래와 같은 순서로 작성하겠다. 1. DB Lock의 기본 개념2. Read Lock vs Write Lock3. 비관적 락 vs 낙관적 락4. 교착 상태5. ORM과 Lock (JPA)1. DB LockLock은 왜 사용해야 할까? 예를 들어 캐치테이블 같은 예약 앱을 생각해보자.여러 명의 유저가 동시에 예약을 시도했을 때, 누가 예약을 ..
-
DNS, DNS 레코드, 서브도메인개발/기타 2025. 5. 3. 18:23
도메인과 연결된 IP를 바꾼다거나, xxx.co.kr 도메인으로 접속했을 때 xxx.com 도메인으로 변경이 필요했던 적이 있다.AWS로 구성된 인프라 환경이었기에 Route53에 있는 레코드 값을 변경해주면 됬지만, 각각의 레코드가 어떤 의미인지 모르고 있었기에 이번에 한번 정리해보고자 한다. 아래와 같은 순서로 작성할 예정이다. 1. DNS? 2. DNS 레코드 종류와 역할3. 서브도메인?1. DNS?나는 DNS를 IP의 별칭 정도로 이해했다.11.22.33.44 라는 IP가 있다면 이에 대한 별칭으로 google.com이 등록돼 있는 것이고, 사람들은 IP보단 별칭인 DNS인 google.com을 사용하는 것 이다. 면접 문제로 브라우저에 "google.com"을 입력하면 어떤 일이 일어나나요?..
-
브라우저에 google.com을 입력하면 어떤 일이 일어날까? - 2개발/기타 2025. 4. 21. 00:04
아래 내용 중 1~3번에 대해 간략하게 요약해 작성하고 4, 5번에 대해 자세히 작성하겠다.1~3번의 자세한 내용은 이전글에 작성했다. 0. 사용자가 google.com을 입력1. 캐시 검사 : 해당 도메인에 대한 IP가 캐시에 있는지 검사한다. 2. DNS 조회 : 만약 캐시가 되어있지 않다면 DNS를 조회해 IP값을 조회한다. 3. TCP (및 TLS) 연결 설정 : DNS를 통해 얻은 IP 주소로 TCP(+TLS) 연결을 시도한다. 4. HTTP 요청 및 응답5. 브라우저의 페이지 렌더링 3번에서 TCP 연결이 완료되면, 이제 해당 IP를 통해 실제 요청을 보낼 차례이다. 실행 흐름대로 작성해야 해서 4번과 5번에 대해 함께 작성하고 이후 추가 설명을 덧붙이도록 하겠다. 4. HTTP 요청 및..
-
브라우저에 google.com을 입력하면 어떤 일이 일어날까? - 1개발/기타 2025. 4. 14. 00:30
브라우저에 google.com을 입력하면 어떤 일이 일어나는지에 대해 작성해보겠다. 아래와 같은 순서로 작성할 예정이다.1. 브라우저에 "google.com"을 입력하면 어떤 일이 일어날까? 1) 캐시 검사 2) DNS 조회 3) TCP (및 TLS) 연결 설정 4) HTTP 요청 및 응답 5) 브라우저의 페이지 렌더링1. 브라우저에 "google.com"을 입력하면 일어나는 일아래와 같은 순서로 동작한다.1. 캐시 검사2. DNS 조회3. TCP (및 TLS) 연결 설정4. HTTP 요청 및 응답5. 브라우저의 페이지 렌더링1) 캐시 검사 및 DNS 조회도메인 조회 시 캐시가 존재하는지, 존재한다면 TTL이 만료되었는지 확인하고 필요한 경우 DNS 서버에 요청한다...
-
스택이 매우 커질 수 있다면 힙은 불필요할까?개발/기타 2025. 4. 6. 22:24
https://www.youtube.com/watch?v=9TSojdIr8Q0이 영상을 보고 "나라면 어떻게 답변했을까?" + 부족했던 점을 작성하고자 한다. 알고 있는 지식, ChatGPT와 더불어 이것 저것 찾아보겠지만 잘못된 내용이 있을 수 있습니다.잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다 :)나라면 어떻게 답변했을까? (잘못된 내용이 있습니다.)메모리 할당 영역은 Data, Stack, Heap 영역 이렇게 3가지가 있는 것으로 알고 있다. Data영역- 전역변수, static 변수 등이 존재Stack 영역- 고정 크기, 지역변수, 매개변수, 함수 리턴 주소가 존재Heap 영역- 동적 크기, 동적 할당 변수 존재 이정도로 배경지식이 있는 상태이다.그렇다면, 스택이 매우 커질 수 있다면..
-
Spring Batch와 Scheduler개발/Spring(boot) 2025. 3. 30. 23:26
Spring Batch와 Scheduler의 차이점이 궁금해져서 관련 내용에 대해 작성해보겠다. 결론부터 말하자면 Spring Batch는 실제 데이터 처리 로직과 비즈니스 처리를, Scheduler는 작업들을 정해진 시점에 실행하도록 관리한다.Spring Batch는 스케줄러를 대체하기보다는 스케줄러와 함께 작동하도록 설계돼있다. (Spring Batch is intended to work in conjunction with a scheduler rather than replace a scheduler.) 아래와 같은 순서로 작성할 예정이다.1. Spring Batch 1-1. Spring Batch의 핵심 구성 요소 1-2. 배치 처리 전략 1-3. 배치 시스템의 처리 전략2. Sched..
-
SpringBoot에서 여러 요청을 동시에 처리하는 방법개발/Spring(boot) 2025. 3. 23. 23:26
Thread Pool에 대해 찾아보던 도중 좋은 강의가 있어 강의 내용에 대해 내가 이해한 방식대로 작성해 보고자 한다.참고한 강의는 우아한테크코스의 강의로 아래 링크에서 확인할 수 있다.https://www.youtube.com/watch?v=um4rYmQIeRESpring Boot 애플리케이션은 기본적으로 내장 서블릿 컨테이너(Tomcat, Jetty ..)를 사용하며,이 서버들은 내부적으로 Thread Pool을 활용하여 요청을 처리한다.따라서 Thread Pool 관련 설정값을 잘 조정해야 어플리케이션을 원할하게 운영할 수 있다. 이번 글에서는 아래 내용에 대해 작성해보고자 한다.1. Program, Process, Thread?2, Thread Pool?3. Java의 Thread Pool4. ..
-
CoroutineScope을 정의하는 방법개발/Spring(boot) 2025. 3. 10. 00:45
suspend fun coroutineScope(block: suspend CoroutineScope.() -> R): R이전 글에서 CoroutineScope를 선언하고 Flow와 함께 사용해 SSE를 구현했었고,잘 모르는 상태로 아래와 같이 CoroutineScope코드를 정의했었다.private val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())그럼 이번 글에서는 CoroutineScope에 대해 작성해보고자 한다.참고로 Docs를 보고 알아볼 예정이지만 백엔드 개발자이기에 안드로이드 관련 내용은 작성하지 않을 예정이다.아래와 같은 순서로 작성하겠다.1. CoroutineScope?1-1. 구조적 동시성(structured concurren..