IT 78

[Java] volatile 키워드

Java 에서 사용하는 volatile 키워드에 대해 정리하고자 한다. 1. volatile 이란?- 코어가 변수의 값을 읽어올 때 캐시가 아닌 메모리에서 읽어오도록 변수 앞에 붙이는 키워드 2. 사용 목적- 가시성을 보장한다.(여기서 가시성이란, 공유 데이터를 사용한 다음 동기화 블록을 빠져나가고 나면 다른 스레드가 변경된 최신 값을 즉시 사용할 수 있게 해야 함을 의미한다.)- 변수 접근에 대한 동기화가 큰 오버헤드를 발생시키는 상황에서 대안이 될 수 있다. 3. 한계- 원자적 연산(읽기와 쓰기 작업이 단일 연산)에서만 사용 가능하다.- 스레드를 차단하지 않기 때문에 복잡한 상태 관리에는 적합하지 않다. 4. synchronized 키워드와의 비교- synchronized 키워드는 더 강력한 동기화 ..

IT/Java 2024.12.09

[AWS] EC2 Nginx 무중단 배포

회사에서 운영하는 서비스에서 수정사항 반영 시 매번 EC2 인스턴스를 중단이 필요했고, 이때 서비스를 제공할 수 없기에 이를 해결하기 위하여 Nginx 를 활용한 무중단 배포 도입을 결정했다. 1. 아키텍처 2. 방법- Spring Boot 애플리케이션을 기존 1개에서 2개로 추가 변경- Nginx 관련 설정 파일(ex. nginx.conf 등) 수정하여 리버스 프록시 역할을 하도록 셋팅- 배포 시 사용할 폴더 및 파일(ex. deploy.sh 등) 추가하여 해당 쉘 스크립트를 실행하면 배포가 진행되도록 셋팅 3. 상세- 3.1. Nginx 관련 설정 파일 수정  - /etc/nginx 폴더에 nginx.conf 파일  - include /etc/nginx/sites-enabled/*; 로 작성된 부분이..

[AWS] DynamoDB 연동기

회사에서 NoSQL 도입을 고려하다가 AWS 를 사용하고 있기에 DynamoDB 연동을 검토해봤다.그 과정에서 알게 된 설정 관련 내용을 정리하고자 한다. 1. 환경 설정- build.gradle 에 의존성(dependency) 추가implementation platform('software.amazon.awssdk:bom:2.20.85')implementation 'software.amazon.awssdk:dynamodb-enhanced' 참고) Spring Boot 버전에 따라 라이브러리 버전도 변경 필요할 수 있다. - application.properties 파일에 설정 추가amazon.dynamodb.accessKey=XXXamazon.dynamodb.secretKey=XXX2. Configur..

[Spring] WebFlux 테스트 코드 작성

Spring 테스트 코드 관련하여 참고하기 위해 찾아보는 가운데, Spring MVC 환경에서의 테스트 코드에 대한 글은 많이 있지만 WebFlux 환경에서의 테스트 코드 글의 갯수는 적은 것 같아 직접 포스팅하고자 한다. - Environment > Java 11  - HTTP 메서드 > GET, POST, PUT Layer 별로 테스트 코드를 작성하였고, 그 순서는 다음과 같다.- Handler (Router) -> Service -> Repository 그리고 given / when / then 구조에 맞춰 작성해 보았다. 먼저 GET 메서드 기준, Layer 별로 테스트 코드를 작성한다. 1. Handler@Transactional@SpringBootTest@AutoConfigureWebTestC..

IT/Spring 2024.11.27

[AWS] ECS Fargate 도입기

회사에서 AWS EC2를 주로 사용하다가 비용 감소 및 관리 효율화 목적으로 ECS Fargate 로의 전환을 시도했다. 그 과정에서 수많은 시행착오를 겪었고 이를 공유하여 도움이 되었으면 하는 마음에서 글을 쓰고자 한다. @ VPC 영역 1. Subnet- VPC 에 Public Subnet 2개, Private Subnet 2개를 각각 생성한다. (기존에 생성된 Subnet 존재 시 활용 가능 / IPv4 CIDR 설정 시 VPC 의 IPv4 CIDR 고려 필요)- Public 과 Private 설정에 따라 활용 목적이 다르다.- VPC 에 가용영역이 4개 존재했고, 2개의 가용영역(c,d)에 각각 Public, Private Subnet 을 1개씩 배치하였다. 2. Routing Table- V..

[Spring] Spring Framework vs. Spring Boot

회사에서 Spring Framework 를 사용하다가, Spring Boot 로 전환했던 경험이 있다. 그리고 현재는 Spring Boot 를 사용하는 곳으로 이직을 하여 커리어를 쌓고 있는 중이다.그 과정에서 Spring Boot 가 막연히 편하다, 생산성이 좋다, 레퍼런스 자료가 많다 등의 생각을 갖고 있었는데 Spring Framework 와 비교하여 어떤 점을 갖고 있는지 정리할 필요가 있다고 생각이 들어 이 글을 쓰게 되었다.그러면 구체적으로 장점을 나열하면 다음과 같다. 1. Jar 파일로 편리한 실행 가능- Spring Framework 의 경우 개발한 애플리케이션을 War 파일로 만들어 웹 애플리케이션 서버에 배포해야 하나, Spring Boot 의 경우 Tomcat 이나 Jetty 등의 ..

IT/Spring 2024.11.14

[CS] 예외 처리

예외 처리의 정의 & 체크 예외 vs. 언체크 예외 & 자주 쓰이는 표준 예외 클래스에 대해 정리하고자 한다. 1. 예외 처리란? - 프로그램 실행 시 발생할 수 있는 예외에 대비하는 것으로 프로그램의 비정상 종료를 막고 실행 상태를 유지하는 것 2. 체크 예외 vs. 언체크 예외 - 체크 예외 - 상속: Exception - 예외 확인 시점: 컴파일 단계 - 예외 처리: O - 장점: 개발자의 실수 감소 - 단점: 번거로움 / 레이어 간의 의존성 증가 / Stream 내에서 사용 X - 언체크 예외 - 상속: Runtime Exception - 예외 확인 시점: 실행 단계 - 예외 처리: X - 장점: 레이어 간의 의존성 감소 - 단점: 개발자의 실수 증가 3. 자주 쓰이는 표준 예외 클래스 - IOE..

IT/CS 2024.03.24

[CS] Cookie

Cookie 의 개념, 특징, 사용 목적에 대해 작성하고자 한다. 1. 개념 - Client 에 저장하는 key-value 형태의 작은 데이터 파일 2. 특징 - 브라우저 단위로 Cookie 생성 - 다른 도메인을 대신하여 Cookie 발급 불가 - 만료 시간까지 상태 정보 유지 3. 사용 목적 - 웹 사이트 재방문 시 효율적으로 서비스를 제공하기 위함 4. 출처 - https://www.youtube.com/watch?v=XgcCkcKGbys [ 10분 테코톡 - 디투의 쿠키와 세션 ]

IT/CS 2024.03.17

[CS] Connection-Timeout vs. Read-Timeout

Connection-Timeout 과 Read-Timeout 의 개념 비교에 대해 글을 쓰고자 한다. 1. Connection-Timeout - 종단 간 연결하는데 소요되는 최대 시간 - 이 시간을 넘기게 되면 연결할 수 없는 것으로 판단하고 에러 발생 2. Read-Timeout - 연결된 종단 간에 데이터를 주고 받을 때 소요되는 최대 시간 - 이 시간을 넘기게 되면 데이터를 주고 받을 수 없는 것으로 판단하고 에러 발생 * 참고 여기서, "연결"은 TCP 3-way handshake 를 통해 TCP 연결이 생성되는 것을 의미한다. 3. 출처 - https://alden-kang.tistory.com/20

IT/CS 2024.03.17

[CS] HTTP/1.1 과 HTTP/2

HTTP/1.1 과 HTTP/2 와 관련해서 특징별 차이점을 작성하고자 한다. 1. 멀티플렉싱 (Multiplexing)- HTTP/1.1 : 하나의 연결에서 한 번에 하나의 요청-응답만 가능함. 즉, 요청을 보낸 후 응답을 받아야 다음 요청을 보낼 수 있음- HTTP/2 : 하나의 연결에서 여러 개의 요청을 동시에 보낼 수 있음. 즉, 응답을 기다릴 필요 없이 여러 요청이 병렬로 처리됨 2. 헤더 압축 (Header Compression)- HTTP/1.1 : 요청 및 응답마다 중복된 헤더가 계속해서 전송됨- HTTP/2 : HPACK 이라는 압축 방식을 사용하여 헤더 크기를 줄이고 네트워크 트래픽을 최적화함 3. 서버 푸시 (Server Push)- HTTP/1.1 : 클라이언트가 요청한 리소스만 응..

IT/CS 2024.03.17