Spring
-
트랜잭션 단위는 일반적으로 짧게 가져가고 것이 이상적입니다. 그 이유에 대해서 살펴보고, 어떻게 구성해야 하는지에 대해서 고민해 보겠습니다. @Transactional 남용의 문제점 @Transactional 어노테이션은 너무나도 편리합니다. 매번 트랜잭션의 시작과 종료를 코드로 명시하지 않아도, Spring AOP를 통해 간단하게 어노테이션으로 트랜잭션 범위를 설정합니다. 공통적인 횡단 관심사를 해결하는 Spring AOP의 대표적인 사례라고 볼 수 있겠습니다. 그렇지만 데이터 관점의 트랜잭션을 실제 비즈니스 로직 관점에서 적용하다 보면, 분명 트랜잭션 적용 범위에 대한 괴리가 발생하게 됩니다. 다음 게시글 작성 예시를 보면서 해당 매서드의 범위가 실제로 이상적인 트랜잭션의 범위인지 고민해봅시다. @T..
[Spring] 트랜잭션(Transaction) 우아하게 분리하기트랜잭션 단위는 일반적으로 짧게 가져가고 것이 이상적입니다. 그 이유에 대해서 살펴보고, 어떻게 구성해야 하는지에 대해서 고민해 보겠습니다. @Transactional 남용의 문제점 @Transactional 어노테이션은 너무나도 편리합니다. 매번 트랜잭션의 시작과 종료를 코드로 명시하지 않아도, Spring AOP를 통해 간단하게 어노테이션으로 트랜잭션 범위를 설정합니다. 공통적인 횡단 관심사를 해결하는 Spring AOP의 대표적인 사례라고 볼 수 있겠습니다. 그렇지만 데이터 관점의 트랜잭션을 실제 비즈니스 로직 관점에서 적용하다 보면, 분명 트랜잭션 적용 범위에 대한 괴리가 발생하게 됩니다. 다음 게시글 작성 예시를 보면서 해당 매서드의 범위가 실제로 이상적인 트랜잭션의 범위인지 고민해봅시다. @T..
2023.09.24 -
[(링크) 해당 게시글은 네이버 클라우드 플랫폼 공식 블로그에도 소개되었습니다 !] [(링크) 이전편 보러가기 ] 개요 이전 편에서 위 순서도까지의 구현을 진행했습니다. 그렇지만 포스트 작성이 어쩔 수 없이 서버에서 비동기 처리로 진행되면서, 다음 요구 사항을 어떻게든 해결해야 합니다. "게시글 작성 성공 시 해당 게시글로 이동할 수 있는 푸시를 제공하고, 실패 시 재시도를 할 수 있게 제공" 소켓 등의 방식도 생각해봤지만 통신 규격에 RestAPI 외에 신경 쓸 요소가 생긴다는 것과, 유저가 앱을 이탈했을 때는 서비스가 관여할 수 있는 범위에서 벗어나게 됩니다. 그래서 결국 푸시 알람으로 해당 로직을 구현하기로 했고, 물론 네이버 클라우드 플랫폼에서 제공하는 'Simple & Easy Notificat..
[Spring] Naver Cloud Platform으로 스트리밍 서비스 개발하기(2) - 푸시 서비스로 인코딩 결과 전송하기[(링크) 해당 게시글은 네이버 클라우드 플랫폼 공식 블로그에도 소개되었습니다 !] [(링크) 이전편 보러가기 ] 개요 이전 편에서 위 순서도까지의 구현을 진행했습니다. 그렇지만 포스트 작성이 어쩔 수 없이 서버에서 비동기 처리로 진행되면서, 다음 요구 사항을 어떻게든 해결해야 합니다. "게시글 작성 성공 시 해당 게시글로 이동할 수 있는 푸시를 제공하고, 실패 시 재시도를 할 수 있게 제공" 소켓 등의 방식도 생각해봤지만 통신 규격에 RestAPI 외에 신경 쓸 요소가 생긴다는 것과, 유저가 앱을 이탈했을 때는 서비스가 관여할 수 있는 범위에서 벗어나게 됩니다. 그래서 결국 푸시 알람으로 해당 로직을 구현하기로 했고, 물론 네이버 클라우드 플랫폼에서 제공하는 'Simple & Easy Notificat..
2023.03.27 -
현재 프로젝트에서 Git branch 전략을 Git flow를 사용하고 있습니다(우아한형제들 - 우린 Git-flow를 사용하고 있어요) 기존에는 시간에 쫒기며 개발하느니라 쉘스크립트로 배포를 했었습니다. 이 프로젝트에서는 다음 세가지 시나리오로 구분하여 CICD 배포 파이프라인을 구성했습니다. feature 브랜치 작업 후 Pull Request -> JAR 빌드 및 테스트 develop 브랜치에 merge(push) -> Jib 빌드 -> 테스트서버 배포 main 브랜치에 merge(push) -> Jib 빌드 -> 메인 서버 배포 일단 Jib 가 무엇일까요? GitHub - GoogleContainerTools/jib: 🏗 Build container images for your Java appli..
[Spring] Jib CI/CD 파이프라인 구축하기 (feat. Spring Rest Docs 를 돌려주세요..)현재 프로젝트에서 Git branch 전략을 Git flow를 사용하고 있습니다(우아한형제들 - 우린 Git-flow를 사용하고 있어요) 기존에는 시간에 쫒기며 개발하느니라 쉘스크립트로 배포를 했었습니다. 이 프로젝트에서는 다음 세가지 시나리오로 구분하여 CICD 배포 파이프라인을 구성했습니다. feature 브랜치 작업 후 Pull Request -> JAR 빌드 및 테스트 develop 브랜치에 merge(push) -> Jib 빌드 -> 테스트서버 배포 main 브랜치에 merge(push) -> Jib 빌드 -> 메인 서버 배포 일단 Jib 가 무엇일까요? GitHub - GoogleContainerTools/jib: 🏗 Build container images for your Java appli..
2023.02.26 -
[(링크) 해당 게시글은 네이버 클라우드 플랫폼 공식 블로그에도 소개되었습니다 !] 포착(Phochak) 포착 서비스는 이번 넥스터즈 활동에서 저희가 출시한 서비스입니다 :) 포착은 여행을 가서 촬영한 짧은 영상들을 저장하고 공유하는 아카이빙 및 스트리밍 서비스입니다. 네이버 클라우드 플랫폼의 든든한 지원 감사하게도 Naver Cloud Platform의 지원으로 크레딧을 지원받아 AWS 가 아닌 NCP를 무.료.로 이용하게 되었습니다 ! NCP를 쭉 들여다보니, AWS와 거의 동일한 환경을 제공합니다. 심지어 AWS SDK와 호환되게끔 구성이 되어있습니다. 이 게시글에서 사용할 NCP 클라우드 요소들을 소개하면.. Server(EC2): 서버 Object Strage(S3): 비용 효율적인 정적 파일 ..
[Spring] Naver Cloud Platform으로 스트리밍 서비스 개발하기(1)[(링크) 해당 게시글은 네이버 클라우드 플랫폼 공식 블로그에도 소개되었습니다 !] 포착(Phochak) 포착 서비스는 이번 넥스터즈 활동에서 저희가 출시한 서비스입니다 :) 포착은 여행을 가서 촬영한 짧은 영상들을 저장하고 공유하는 아카이빙 및 스트리밍 서비스입니다. 네이버 클라우드 플랫폼의 든든한 지원 감사하게도 Naver Cloud Platform의 지원으로 크레딧을 지원받아 AWS 가 아닌 NCP를 무.료.로 이용하게 되었습니다 ! NCP를 쭉 들여다보니, AWS와 거의 동일한 환경을 제공합니다. 심지어 AWS SDK와 호환되게끔 구성이 되어있습니다. 이 게시글에서 사용할 NCP 클라우드 요소들을 소개하면.. Server(EC2): 서버 Object Strage(S3): 비용 효율적인 정적 파일 ..
2023.02.06 -
웹 서버들은 어떻게 동시에 여러개의 요청을 처리할까? 일반적으로 멀티 쓰레드를 이용한 방법을 채택한다. 그런데 동시에 10만개의 요청이 들어왔을때, 쓰레드가 10만개가 생성될까? 멀티 쓰레드는 다음과 같은 단점이 있다. 쓰레드를 생성하는 비용이 크다 CPU level에서 context switching 이 더 자주 일어나게 되면서, 성능 저하가 발생한다. limit 을 걸어놓지 않으면 쓰레드가 무한정 생성되고, 물리적 성능 한계를 넘어서면 서버가 다운될 수 있다. 그래서 Tomcat에서는 Tread Pool 이라는 것을 관리한다. Thread Pool 의 동작 과정은 다음과 같다. 일정 개수의 Thread를 미리 열어놓는다. 새로운 요청이 들어오면, 비어있는 Thread를 할당한다. 서블릿 객체를 통해 ..
[Spring] Apache AB를 활용한 서버 성능테스트와 톰캣 쓰레드(Thread) 확장으로 성능 최적화웹 서버들은 어떻게 동시에 여러개의 요청을 처리할까? 일반적으로 멀티 쓰레드를 이용한 방법을 채택한다. 그런데 동시에 10만개의 요청이 들어왔을때, 쓰레드가 10만개가 생성될까? 멀티 쓰레드는 다음과 같은 단점이 있다. 쓰레드를 생성하는 비용이 크다 CPU level에서 context switching 이 더 자주 일어나게 되면서, 성능 저하가 발생한다. limit 을 걸어놓지 않으면 쓰레드가 무한정 생성되고, 물리적 성능 한계를 넘어서면 서버가 다운될 수 있다. 그래서 Tomcat에서는 Tread Pool 이라는 것을 관리한다. Thread Pool 의 동작 과정은 다음과 같다. 일정 개수의 Thread를 미리 열어놓는다. 새로운 요청이 들어오면, 비어있는 Thread를 할당한다. 서블릿 객체를 통해 ..
2022.08.22