분류 전체보기
-
CI / CD카테고리 없음 2024. 2. 22. 02:01
Jenkins, Docker, AWS 등을 적용하면서 CI/CD를 위해 사용하는 것을 알았지만 정확하게 왜 사용하는지 사용하면 편리한 점, 정확히 어떤 기능을 하는 지에 대해 잘 모르고 무작정 따라하기만 했다. CI/CD Continuous Integration/Continuous Delivery 는 지속적 통합 / 지속적 배포를 의미합니다. continuous integration : 코드를 빌드, 테스트하고 합친다. continuous delivery : 해당 repository에 릴리즈한다. continuous deployment : 이를 실제 서비스에 배포한다. CI/CD의 예시 CI, Continuous Integration 개발이 끝난 후 코드 품질을 관리하는 방식의 단점을 해결하기 위해 나타..
-
ec2 docker jenkins 플러그인 설치 에러트러블슈팅 2024. 2. 22. 02:01
aws ec2를 사용해 docker를 설치한 뒤, jenkins 이미지를 받아온 후, jenkins 컨테이너를 실행한 후에 ec2 서버에 접속하여 비밀번호 입력 후, 플러그인을 설치할 때 제대로 설치되지 않는 오류가 발생했다. 설치할 때 젠킨스의 버전이 오래된 것을 사용해서 발생한 문제였다. jenkins 이미지를 받고 jenkins 컨테이너를 실행할 때, sudo docker run -d -p 3000:8080 -v /jenkins:/var/jenkins_home --name jm_jenkins -u root jenkins/jenkins:lts 를 통해 lts버전으로 실행하여 해결했습니다.
-
쿠키, 세션네트워크 2024. 2. 22. 01:59
Http의 비연결성, 무상태브라우저와 서버는 실제로 멀리 떨어져 있습니다. 이 둘은 연결되어 있는 것처럼 보이지만, 연결되어 있지 않습니다.만약 계속 연결되어 있다면 이 상태를 계속해서 유지시켜준다면 매우 큰 서버 비용이 발생하게 될겁니다.Http라는 프로토콜을 이용하여 통신하는데, 그 통신은 비연결성(Connectionless)와 무상태성(Stateless)로 이루어집니다.비연결성서버와 클라이언트가 연결되어 있지 않다는 것 입니다.채팅이나 게임 같은 것들을 하지 않는 이상 서버와 클라이언트는 실제로 연결되어 있지 않습니다.무상태성서버가 클라이언트의 상태를 저장하지 않는다는 것입니다.기존의 상태를 저장하는 것들도 마찬가지로 서버의 비용과 부담을 증가시키는 것 이기 때문에 기존의 상태가 없다고 가정하는 프..
-
Spring에서 Redis로 분산락 사용하기Spring 2024. 2. 22. 01:58
항해99를 진행하면서 팀원분들과 동시성 문제에 대해 이야기를 나누면서 낙관적락, 비관적락에 대해 테스트도 진행해보고 Redis의 분산 락에 대해 알게 되었습니다. Redis는 Reddison으로 구현하는 분산 락뿐만 아니라, Lettuce의 스핀 락도 존재했는데 스핀 락의 경우 분산 락과 달리, Lock을 얻지 못 하면 계속해서 요청을 보내기 때문에 Redis에 대한 부하가 커지게 되서 Pub / Sub 방식을 사용하는 Redisson으로 하는 것이 좋다고 생각했습니다. Lettuce로도 구현할 수 있지만 복잡하기 때문에 구현하기 쉬운 Redisson을 사용했습니다. 분산 락, Distributed Lock 하나의 요청이 리소스를 선점하면 나머지의 요청은 대기하고 있습니다. 요청이 끝난 후에 Redis는..
-
AOP, Aspect-Oriented ProgrammingSpring 2024. 2. 22. 01:57
AOP, Aspect-Oriented Programming AOP는 핵심 로직과 부가 기능을 분리하여 애플리케이션 전체에 걸쳐 사용되는 부가 기능을 모듈화하여 재사용할 수 있도록 지원하는 것입니다. 주로 중복되는 부분을 제거하고 횡단 관심사를 개별 모듈로 분리하여, 깔끔하게 유지보수 할 수 있도록 도와줍니다. 횡단 관심사를 개별 모듈로 분리한다는 것은 위의 예시에서 쉽게 확인할 수 있습니다. 실제 비즈니스 로직에서의 예시에서는 DB 연결, 로깅, 파일 입출력 등이 있습니다. AOP의 주요 개념 Aspect(관점): 횡단 관심사를 정의한 모듈. 로깅, 보안, 트랜잭션 관리 등이 Aspect의 예시입니다. Join Point + Pointcut을 모듈화한 것 Join Point(결합 지점): 프로그램 실행 ..
-
동시성 문제와 LockSpring 2024. 2. 22. 01:56
트랜잭션 데이터베이스의 상태를 변경시키기 위해 수행하는 작업 단위 또는 한꺼번에 수행되어야 할 일련의 연산들을 의미합니다. 하나의 트랜잭션은 여러 단계로 이루어져 있으며, 모든 단계가 완료되면 커밋(commit)되어 데이터베이스에 변경사항이 저장됩니다. 하지만 중간에 문제가 발생하여 트랜잭션이 완료되지 못할 경우, 롤백(Rollback)을 통해 트랜잭션의 모든 변화를 원상태로 복구 시킵니다. 트랜잭션은 데이터의 일관성을 보장하는 중요한 역할을 하며 JPA에서도 트랜잭션 개념을 사용하여 Entity를 관리하고 있습니다. 트랜잭션의 특징 원자성(Atomicity) : 트랜잭션에 포함된 작업들이 DB에 모두 반영되거나, 전혀 반영되지 않아야 한다는 특성입니다.(All or Nothing) 일관성(Consist..
-
jMeter로 동시성 테스트하기Spring 2024. 2. 22. 01:55
사용자가 게시판을 생성할 때, 개수의 제한을 5개로 제한하고 짧은 시간 내에 많은 수의 게시판을 생성하려고 시도할 때 DB에 어떻게 저장되는지 동시성 테스트를 해봤습니다. public void createBoard(BoardDto boardDto) { Long userId = jwtUtil.getUserId(); if(getBoardUserSize(userId) > 5) { throw new IllegalArgumentException("보드 생성 제한 5개가 넘습니다."); } User user = findUser(userId); Board board = new Board(boardDto, userId); BoardUser boardUser = new BoardUser(board, user); boar..
-
지연 로딩, 즉시 로딩Spring 2024. 2. 22. 01:55
엔티티 간의 연관 관계 지연 로딩과 즉시 로딩을 하기 전에 먼저 엔티티 간의 연관 관계를 알 필요가 있습니다. 관계형 데이터베이스에서는 테이블 간 foreign key로 연관 관계를 맺어 JOIN을 통해 테이블을 조회합니다. Teacher 테이블과 Lecture 테이블이 있다고 했을 때, 하나의 교수는 여러 개의 강의를 할 수 있습니다. 즉, Teacher와 Lecture는 1 : M 인 연관 관계라고 할 수 있습니다. 이를 JPA에서는 @ManyToOne, @JoinColumn 애너테이션을 통해 나타냅니다. @Entity public class Teacher { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Colum..