전체 글68 사이드프로젝트에 jenkins를 통한 ci/cd 적용하기 동기실무에서 jenkins + github actions를 통해 ci/cd가 이루어지는데, 굉장히 편리하다고 생각했다.관리자가 따로 있어서 나는 사용하는 입장이므로 사이드프로젝트에 직접 적용하여 경험해보고 싶었다. 적용 방법 jenkins 설치먼저 gcp 인스턴스에 jenkins를 설치해주었다. jenkins를 설치하면 jenkins 계정이 생기고 이 계정에 의해 jenkins가 데몬 프로세스로 동작한다.http://서버ip:젠킨스포트번호/ 로 접속하면 젠킨스 web을 확인할 수 있다. jenkins web 에서는 작업을 생성하고 관리할 수 있다. github 연동 나는 github에 push -> jenkins 에 의한 빌드 및 배포 를 원하기 때문에 jenkins - github을 연동해야.. devops 2025. 7. 27. Thread 출처https://jongwoon.tistory.com/9https://ittrue.tistory.com/173Thread 란 ?프로세스 내에서 실제 작업을 수행하는 실행단위 , 즉 프로세스 > 스레드java 에서는 main 스레드에서 시작, 추가로 생성하면 멀티 스레드 환경OS 레벨에서의 보편적 개념하나의 java 프로세스는 기본적으로 하나의 main thread 로 실행됨필요 시 여러 thread 를 만들어 병렬 작업 가능스레드는 프로세스의 힙 메모리 자원을 공유하기 때문에 공유 자원 사용에 각별한 주의 필요MultiThreading여러 스레드를 동시에 실행시키는 프로그래밍 기법프로세스를 생성하는 것보다 스레드를 생성하는 것이 비용이 적다멀티 프로세스보다 멀티 스레드가 비용이 적게 든다동기화를 고려한.. Java 2025. 6. 22. Pageable 커스텀 예외처리 siso 사이드프로젝트를 진행하면서 스프링에서 페이징 처리를 위해 제공하는 Pageable 인터페이스의 예외처리를 적용한 방법을 정리해보자. 커스텀 예외처리를 적용한 이유 siso는 @RestControllerAdvice 에서 예외를 처리한다. Pageable 기본 예외처리 말고 내가 원하는 예외 타입을 던지고 정해놓은 형식에 맞게 처리되길 원했다. 예를 들어 page size -1 요청에 대해서 IllegalArgumentException: Page size must not be less than one! 가 발생하는데, 나는 내가 정의한 예외 타입 - 예외 코드에 의해 처리되길 바란다. Pageable은 page size가 -1 이라던가 하는 일반적으로 잘못된 요청에 대해서는 예외처리를 하지만, 더 .. 스프링 2025. 6. 7. 테스트에서 @CreatedDate 정렬 문제 해결하기 문제상황테스트 코드 작성 중 @CreatedDate 필드가 자동으로 현재 시간을 설정하면서, 데이터 정렬이 일정하지 않아 테스트가 실패하는 문제를 겪었다. Rating rating = saveRating(다미, 이준석, 3.5, 1); Rating rating1 = saveRating(레온이, 이준석, 3.5, 2); Rating rating2 = saveRating(장몽이, 이준석, 3.5, 3); Rating rating3 = saveRating(멍청이, 이준석, 3.5, 4); log.info("rating createdDate : {}",rating.getCreatedDate()); log.info("rating 1 cre.. 테스트 2025. 2. 11. 트랜잭션 내부에서 외부 api 호출하지 말자 // CongressmanService @Transactional public NewsListDTO findNewsList(String encryptedCongressmanId, Pageable pageable) { final Long congressmanId = aesUtil.decrypt(encryptedCongressmanId); final Congressman congressman = findById(congressmanId); // 외부 api 호출 final String response = getApiResponse(buildUrlStringForNews(pageable, congressman)); .. 스프링 2025. 2. 3. spring 요청 Validation 검증, 예외 처리 서론최근 tdd 방식으로 사이드프로젝트를 진행중이다.tdd 방식은 시간도 더 걸리고 귀찮지만 이미 테스트코드가 있으니까 리팩터링 시 chat gpt를 적극 활용할 수 있다. 코드를 수정할 때도 테스트 딸깍으로 사이드 이펙트를 확인할 수 있어서 좋다. 또, 실패 테스트 작성 과정에서 예외 처리에 대해 신경쓰게 되어 꼼꼼한 예외처리가 가능해지는 것 같다. 컨트롤러에서 요청값을 받을 때 적용한 예외처리에 대해 간단하게 정리해보고자 한다. Bean Validation @GetMapping("/{encryptedCongressmanId}") public ResponseEntity ratingList( @PathVariable String encryptedCongressmanId, .. 스프링 2025. 1. 16. L4 스위치 회사에서 L4 스위치 관련해 이슈가 있었는데 관련 지식이 부족해 찾아보던 중 잘 정리된 포스팅이 있어 읽고 간단하게 정리해보았다. L4 스위치란?L4 스위치는 서버 부하 분산=로드빌런싱 을 처리하는 장치다뿐만 아니라 프로토콜(TCP, UDP, HTTP 등)의 헤더를 분석한 정보를 토대로 부하 분산을 실시하고, source ip, destination ip를 NAT 해서 보낼 수 있다.관련 용어L4 스위치는 외부 접속용 공인 IP(NAT IP)와 서버와 통신하기 위한 사설 IP를 갖게된다모든 요청은 L4스위치를 통해 서버로 들어오므로, 서버는 공인 ip가 필요없고 사설 ip만 갖는다.외부에서 서버 ip를 알 수 없고 악의적 공격이 제한된다.Virtual ServerL4 스위치의 Virtual Server.. infra 2024. 12. 31. 컨트롤러 단위 테스트 시 mock 객체 stubbing을 해야할까 컨트롤러 단위 테스트를 작성할 때는 @WebMvcTest 등으로 웹 계층의 빈만 주입받는다.이 때 컨트롤러가 의존하는 객체(서비스 등)는 @MockBean 등으로 만들어준다.mock 객체 stubbing을 해야한다나는 이제까지 mock 객체의 메서드가 호출된다면 stubbing을 해줘야 한다고 생각했다.예를 들어 컨트롤러 단위 테스트 시에 서비스는 stubbing을 통해 정상작동하는 것을 보장해야 컨트롤러에 대해서만 테스트 할 수 있다고 생각했다.@WebMvcTest(MessageController.class)class MessageControllerTest { @Autowired private MockMvc mockMvc; @MockBean private MessageService.. 테스트 2024. 12. 17. 개발보안 취약 사례 및 대응방안 - 2 지난 글에 이어서 sql injection과 xxs등 이외 최약 사례에 대해 알아보자. sql injectionsql injection은 db 질의와 관련된 웹 파라미터에 악성 sql을 주입해 db, 서버를 공격하는 것이다. 여러가지 종류가 있는데, 하나씩 확인하며 이해해보자.sql injection 종류error based sql injection웹 페이지 응답 데이터에 dbms error message가 응답될 때 할 수 있는 공격 기법이다. dbms 에러를 유발할 수 있는 입력값을 입력하고 에러 메세지를 통해 정보를 탈취한다. blind sqlsql where 절 조건이 true일때와 false 일 때 응답값 유무를 확인해 취약점을 찾고 추가적인 공격을 통해 데이터를 얻는 방식이다. select *.. 시큐어코딩 2024. 12. 4. https 취약점 https를 사용하면 안전하다고 생각해서 비밀번호 등을 암호화 하지 않는 경우가 있다. 하지만 https를 사용하더라도 중간자 공격에 의해 비밀번호가 탈취될 수 있다. https의 동작 대칭 키와 비대칭 키대칭 키 방식은 하나의 대칭 키로 암호화, 복호화를 하는 것이다.최초 접근 시에 서버가 클라이언트로 대칭 키를 전달해 줘야 하는데 이 때 탈취당할 수 있다.비대칭 키 방식은 서버가 공개 키/개인 키를 갖고 있다가 클라이언트 요청 시 공개키를 주는 방식이다.대칭 키 방식에 비해 성능이 저하된다. ssl을 활용한 https보안성과 성능 두마리 토끼를 잡기 위해 실제로는 두 방식을 섞어서 사용한다. 서버(사이트)는 서버의 공개 키와 사이트 정보를 인증기관에 전달인증기관은 (서버 공개키 + 사이트 정보)를 인.. 시큐어코딩 2024. 12. 1. 개발보안 취약 사례 및 대응 방안 - 1 kt ds에서 진행하는 개발자를 위한 보안실무 교육을 이틀간 듣고 간단하게 정리해보고자 한다. 클라이언트 기반 인증 우회 url 직접 접근으로 인증 flow 우회 공격자가 인증에 성공할 시 접근하는 url이 /member/success.php 안다면, 해당 url로 직접접근해서 인증을 우회하는 방식이다. 인증 값 조작을 통한 인증 우회 인증 모듈 결과를 클라이언트 영역에서 조작하는 공격 방식예를 들어 임의의 sms 인증값을 입력하고 BurpSuite같은 웹 프록시 도구로 JS 코드를 조작(isAuth : false를 isAuth : true로 조작하거나, 실패 응답코드를 성공 응답코드로 조작하는 등)하여 로그인에 성공한다.응답 값에 인증번호 노출sms 인증 번호가 js상에 노출되는 경우 휴대전화 없이 s.. 시큐어코딩 2024. 11. 24. 인덱스 데이터베이스에서 쓰이는 인덱스에 대해 알아보자. 인덱스란?인덱스는 데이터베이스에서 데이터 검색(SELECT) 속도를 높이기 위해 사용되는 자료구조다. 인덱스 장점 SELECT (조회) 성능 향상인덱스 단점대략적으로 테이블의 10% 추가 공간 필요INSERT, UPDATE, DELETE가 자주 발생하면 성능에 악영향 인덱스 종류 클러스터형 인덱스 테이블 당 1개만 생성 가능 PK 컬럼에 대해 자동 생성 리프 노드가 실제 데이터 레코드를 포함따라서 실제 데이터 레코드는 클러스터형 인덱스 키 순서대로 정렬보조 인덱스한 테이블에 여러개 생성 가능 UNIQUE 제약 조건 컬럼에 대해 자동 생성 리프 노드가 실제 데이터 레코드의 위치 포함보조 인덱스 자체는 키에 대해 정렬됨동작 원리 일반적으로 클러스터링 인덱스, .. 데이터베이스 2024. 11. 21. 이전 1 2 3 4 ··· 6 다음