분류 전체보기

· devops
동기실무에서 jenkins + github actions를 통해 ci/cd가 이루어지는데, 굉장히 편리하다고 생각했다.관리자가 따로 있어서 나는 사용하는 입장이므로 사이드프로젝트에 직접 적용하여 경험해보고 싶었다. 적용 방법 jenkins 설치먼저 gcp 인스턴스에 jenkins를 설치해주었다. jenkins를 설치하면 jenkins 계정이 생기고 이 계정에 의해 jenkins가 데몬 프로세스로 동작한다.http://서버ip:젠킨스포트번호/ 로 접속하면 젠킨스 web을 확인할 수 있다. jenkins web 에서는 작업을 생성하고 관리할 수 있다. github 연동 나는 github에 push -> jenkins 에 의한 빌드 및 배포 를 원하기 때문에 jenkins - github을 연동해야..
· Java
출처https://jongwoon.tistory.com/9https://ittrue.tistory.com/173Thread 란 ?프로세스 내에서 실제 작업을 수행하는 실행단위 , 즉 프로세스 > 스레드java 에서는 main 스레드에서 시작, 추가로 생성하면 멀티 스레드 환경OS 레벨에서의 보편적 개념하나의 java 프로세스는 기본적으로 하나의 main thread 로 실행됨필요 시 여러 thread 를 만들어 병렬 작업 가능스레드는 프로세스의 힙 메모리 자원을 공유하기 때문에 공유 자원 사용에 각별한 주의 필요MultiThreading여러 스레드를 동시에 실행시키는 프로그래밍 기법프로세스를 생성하는 것보다 스레드를 생성하는 것이 비용이 적다멀티 프로세스보다 멀티 스레드가 비용이 적게 든다동기화를 고려한..
· 스프링
siso 사이드프로젝트를 진행하면서 스프링에서 페이징 처리를 위해 제공하는 Pageable 인터페이스의 예외처리를 적용한 방법을 정리해보자. 커스텀 예외처리를 적용한 이유 siso는 @RestControllerAdvice 에서 예외를 처리한다. Pageable 기본 예외처리 말고 내가 원하는 예외 타입을 던지고 정해놓은 형식에 맞게 처리되길 원했다. 예를 들어 page size -1 요청에 대해서 IllegalArgumentException: Page size must not be less than one! 가 발생하는데, 나는 내가 정의한 예외 타입 - 예외 코드에 의해 처리되길 바란다. Pageable은 page size가 -1 이라던가 하는 일반적으로 잘못된 요청에 대해서는 예외처리를 하지만, 더 ..
· 테스트
문제상황테스트 코드 작성 중 @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..
· 스프링
REST API를 개발하다 보면 외부 API를 호출하고 그에 대한 예외를 처리해야 하는 상황이 자주 발생한다.외부 API에서 내려주는 HTTP 상태 코드와 에러 메시지를 내 서비스의 예외 처리 방식과 일관되게 매핑해야 한다.이 글에서는 외부 API 예외를 내 서비스에서 어떻게 처리하면 좋을지, 그리고 확장 가능한 예외 처리 구조를 어떻게 설계할지 정리해본다. 📒 외부 API 예외 응답의 형태일반적으로 외부 API는 자체적으로 정의한 에러 코드, 에러 메시지를 반환한다.국회 api 예시를 보자.자체적으로 정의한 에러코드, 에러메세지를 반환하고 있다.http 상태코드는 api 마다 다른데, 국회 api는 에러여도 200 ok로 온다.  📒 내 서비스에서의 예외 처리 방식 private void va..
· 스프링
// 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)); ..
· Java
얼떨결에 조기축구 팀 운영진? 에 합류하게 되면서 스쿼드를 짤 일이 생겼는데 직접 짜려니까 생각보다 너무 머리아팠다. 그래서 스쿼드빌더를 만들었다. 가장 익숙한 java를 사용했고, 어차피 우리팀만 쓸 거니까 launch4j를 사용해 exe 파일로 만들어서 공유했다.  알고리즘은 1쿼터에는 입력 순으로 원하는 포지션에 배치해준다. 배치할 때 쿼터당 `선호 포지션 배정 : 2점, 비선호 포지션 배정 : 1점 으로 점수를 매겨서 다음 쿼터 짤 때는 점수가 낮은 사람부터 원하는 포지션에 넣어줬다. 그리고 참석율에 따라 배정 쿼터 수를 3쿼터, 2쿼터로 나눴다. (우리 팀의 규칙이다) GUI는 대충 동작만 하면 되기 때문에 gpt한테 맡겼다. 나름 잘 만들어줬다. ㅋㅋ txt  파일로 선수이름, 불참횟수, 선호..
· 스프링
서론최근 tdd 방식으로 사이드프로젝트를 진행중이다.tdd 방식은 시간도 더 걸리고 귀찮지만 이미 테스트코드가 있으니까 리팩터링 시 chat gpt를 적극 활용할 수 있다. 코드를 수정할 때도 테스트 딸깍으로 사이드 이펙트를 확인할 수 있어서 좋다. 또, 실패 테스트 작성 과정에서 예외 처리에 대해 신경쓰게 되어 꼼꼼한 예외처리가 가능해지는 것 같다. 컨트롤러에서 요청값을 받을 때 적용한 예외처리에 대해 간단하게 정리해보고자 한다. Bean Validation @GetMapping("/{encryptedCongressmanId}") public ResponseEntity ratingList( @PathVariable String encryptedCongressmanId, ..
· infra
회사에서 L4 스위치 관련해 이슈가 있었는데 관련 지식이 부족해 찾아보던 중 잘 정리된 포스팅이 있어 읽고 간단하게 정리해보았다.  L4 스위치란?L4 스위치는 서버 부하 분산=로드빌런싱 을 처리하는 장치다뿐만 아니라 프로토콜(TCP, UDP, HTTP 등)의 헤더를 분석한 정보를 토대로 부하 분산을 실시하고, source ip, destination ip를 NAT 해서 보낼 수 있다.관련 용어L4 스위치는 외부 접속용 공인 IP와 서버와 통신하기 위한 사설 IP를 갖게된다모든 요청은 L4스위치를 통해 서버로 들어오므로, 서버는 공인 ip가 필요없고 사설 ip만 갖는다.외부에서 서버 ip를 알 수 없고 악의적 공격이 제한된다.Virtual ServerL4 스위치의 Virtual Server : 외부에서 ..
· 테스트
컨트롤러 단위 테스트를 작성할 때는 @WebMvcTest 등으로 웹 계층의 빈만 주입받는다.이 때 컨트롤러가 의존하는 객체(서비스 등)는 @MockBean 등으로 만들어준다.mock 객체 stubbing을 해야한다나는 이제까지 mock 객체의 메서드가 호출된다면 stubbing을 해줘야 한다고 생각했다.예를 들어 컨트롤러 단위 테스트 시에 서비스는 stubbing을 통해 정상작동하는 것을 보장해야 컨트롤러에 대해서만 테스트 할 수 있다고 생각했다.@WebMvcTest(MessageController.class)class MessageControllerTest { @Autowired private MockMvc mockMvc; @MockBean private MessageService..
지난 글에 이어서 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 *..
https를 사용하면 안전하다고 생각해서 비밀번호 등을 암호화 하지 않는 경우가 있다. 하지만 https를 사용하더라도 중간자 공격에 의해 비밀번호가 탈취될 수 있다. https의 동작 대칭 키와 비대칭 키대칭 키 방식은 하나의 대칭 키로 암호화, 복호화를 하는 것이다.최초 접근 시에 서버가 클라이언트로 대칭 키를 전달해 줘야 하는데 이 때 탈취당할 수 있다.비대칭 키 방식은 서버가 공개 키/개인 키를 갖고 있다가 클라이언트 요청 시 공개키를 주는 방식이다.대칭 키 방식에 비해 성능이 저하된다. ssl을 활용한 https보안성과 성능 두마리 토끼를 잡기 위해 실제로는 두 방식을 섞어서 사용한다. 서버(사이트)는 서버의 공개 키와 사이트 정보를 인증기관에 전달인증기관은 (서버 공개키 + 사이트 정보)를 인..
장몽이
'분류 전체보기' 카테고리의 글 목록