개발 12

Github PR Status With Jenkins

SI 프로젝트 중 고객사 CI/CD 구축 환경 구성을 진행중에 있습니다. 모든 인프라는 AWS내 구성하였으며 대략적인 Workflow는 다음과 같습니다. 1. Github Create PR2. WebHook을 이용하여 Jenkins Job Triiger3. Job Triiger와 동시에 Github Status 생성 (Build, Test, Deploy 등 ..)4. Merge를 위한 조건으로는 Build, Sonarqube 분석 Pass5. Status All Pass시 Merge 버튼 활성화 이 중 2번과 3번을 해결하기 위해 Jenkins Plugin 중 Github PullRequest Builder를 사용하였으며Sonarqube에 대한 정적분석 결과를 PR Comment로 받기 위해 sonarq..

개발/CI_CD 2023.08.11

[Spring] json deserialize ClassCastException

내부 API 통신 중 T 타입으로 받은 DTO가 해당 DTO 객체가 아닌 LinkedHashMap으로 인식되는 문제를 겪었습니다. 이유를 찾아보니 WebClient의 bodyToMono(Class) 를 통해 역직렬화시 내부적으로 Jakson 라이브러리를 사용하며 json 데이터를 단순히 List로 지정시 "객체"가 어떤것인지 명확하게 알지못하기 때문에 기본 타입인 LinkedHashMap으로 변환하게 됩니다. 구글링에서 흔히 나오는 간단한 해결 방법은 다음과 같았습니다. ObjectMapper mapper = new ObjectMapper(); mapper.convertValue(타겟 클래스, new TypeReference()); 하지만 별도의 후처리가 번거롭다면 문제점 자체가 어떤 타입인지 명확히 알..

개발/Spring 2022.06.16

InvalidDefinitionException 에러

WebClient를 사용하여 크롤링할 데이터를 받는 도중 InvalidDefinitionException 에러가 발생했다. 에러 로그를 읽어보니 기본 생성자가 없다고 나오고 관련 검색을 해봐도 기본 생성자를 생성해봐라! 라는 답변이었다. 이는 불변 객체를 선언하고 싶은 나에게는 맞지 않는 해답이기 때문에 더 찾아보니 @JsonCreateor와 @JsonProperty를 사용하는 방법을 찾았고 다음과 같이 수정 후 정상 작동하는것을 확인했다. 참고 https://www.baeldung.com/jackson-deserialize-immutable-objects Deserialize Immutable Objects with Jackson | Baeldung Learn how to use Jackson to d..

개발/Spring 2022.06.08

[Docker] Ports are not available 에러

ERROR: for frontend Cannot start service frontend: Ports are not available: listen tcp 0.0.0.0:3306: bind: An attempt was made to access a socket in a way forbidden by its access permissions. Docker에 my-sql 올려놓고 사용중 어느날 갑자기 Ports are not available 에러가 발생했다. 문자 그대로 해석하면 해당 포트에 접근 권한이 없다고 나온다 (mysql 3306 포트) 검색해보니 어떤 이유인지는 모르겠으나 윈도우 자체에서 해당 포트를 막고있었는데 관리되는 포트는 netsh interface ipv4 show excludedpor..

개발/Docker 2022.05.27

Spring Data JPA - 2

패스트캠퍼스 강의를 보며 정리한 내용입니다. 1. @Repository persistence layer를 구현하는 클래스는 @Component와 마찬가지로 해당 클래스를 빈으로 등록해서 사용해야 합니다.@Repository로 등록을 하게되면 persistence layer에서 발생하는 에러를 DataAccessException으로 Spirng error로처리해주기 때문입니다. 하지만 JPA를 사용할 때 어노테이션 없이 extends 받는것만으로 사용하고 있는데 그 이유는 상속받는 JpaRepository의 구현체를 따라가보면 알 수 있습니다 따라서 Spring Data JPA를 사용하게 될 경우 직접 @Repository 어노테이션을 사용할 일은 없다고 봐도 무방합니다. JpaRepository의 상속 ..

개발/Spring 2022.02.25

Spring Data JPA - 1

1. JPA 개요 1-1. ORM Object Relational Mapping의 약자로 한글 해석은 객체 관계형 매핑입니다. 간단하게 말하면 관계형 데이터베이스의 테이블 데이터를 자바 객체와 매핑하는 기술을 뜻합니다. ORM을 통해 얻고자 하는 것들은 다음과 같습니다. 특정 DB에 종속된 표현이나 구현들을 할 필요가 없기에 DB 변경에 유연함. DB에 종속된 표현이 아닌 객체의 이점을 살릴 수 있기에 객체간 참조나 type-safety에 유리함. 연결 관리, 자원의 관리 등의 동작을 프레임워크에 맡겨 필요한 비즈니스 로직에만 집중할 수 있음. 1-2. JPA Jakarta(Java) Persistence API의 약자로 자바에서 ORM 기술을 활용하여 RDBMS를 다루기 위한 인터페이스의 집합입니다. ..

개발/Spring 2022.02.24

취업 면접 준비

면접에 대비하여 실제 질문 - 답변 형식으로 상상하며 매우 주관적으로 작성했습니다. Java & Programming Q. 객체지향이란? 더보기 A. 현실 세계의 사물을 컴퓨터의 세계로 들고 와 사람이 이해하기 편하게 프로그래밍하는 것으로 추상화, 캡슐화, 상속, 다형성의 특징을 갖고 있습니다. 꼬리 Q. 각 특징에 대해 설명해주세요. A. 추상화란 여러가지 사물의 공통점을 추출해서 하나의 이름으로 부르는 것을 의미합니다. 예를 들어 승용차, 승합차, 버스, 화물차 등은 자동차라는 하나의 이름으로 추상화할 수 있습니다. 캡슐화란 특정 기능을 하는 로직을 클래스라는 캡슐에 묶어 수정없이 사용하거나 사소한 수정만으로 재사용이 가능하게끔 하는 것과 접근 제어자를 통해 외부에 내부 코드나 상태를 숨길 수 있습니..

개발/공부 2022.01.26

MSA(Micro Service Architecture) 아키텍처란?

취업을 준비하기 위해 구인 광고를 보다 보니 낯설지만 많은 회사가 원하는 경험이 있었는데 바로 MSA 경험이었다. (도메인 주도 설계는 MSA를 위한 설계 방법 중 하나로 포함했다) 다른 것과는 다르게 특정 기술로 보이진 않아 궁금증이 생겨 찾아보기 시작했다. MSA를 설명하기 전 기존의 방법인 모놀리틱 아키텍처를 그림으로 간략하게 그려보자면 아래와 같다. 모든 도메인이 묶여있고 하나의 DB만을 바라보고 있어 하나의 서비스에 대해서만 배포 및 테스트를 수행하면 되고 트랜잭션 또한 DB가 하나이니 서비스의 규모가 크지 않은 경우에는 MSA보다는 더 효율적이라고 할 수 있다. 만약, 서비스 규모가 커져 다음과 같은 상황이 발생한다면? 위 그림에서의 보이는 단점을 몇 가지만 살펴보자. 1. 작은 프로세스의 수..

개발/기술 2021.12.20

알고리즘 - 2

1. 정렬 알고리즘 컴퓨터 과학에서 가장 많이 사용되는 연산 중 하나일 만큼 데이터를 활용함에 있어 정렬은 매우 중요하다. 예를 들자면, 당장 이 글을 쓰고 있는 티스토리에서도 글이 수백 개가 넘어간다면 카테고리별 혹은 날짜별 같은 특정한 정렬 기준에 따라 나열되어 있지 않다면 사람이 찾을 때도, 컴퓨터가 찾을 때도 많은 시간을 요구한다. 정렬 방법은 정렬이 수행될 때 데이터가 저장되어 있는 위치에 따라 내부 정렬, 외부 정렬로 구분한다. 내부 정렬은 데이터의 용량이 주기억장치(RAM) 저장 공간보다 작을 때 수행하는 정렬 방법이며 다양한 알고리즘에서 흔하게 사용되고 있는 정렬 방법이다. 외부 정렬은 내부 정렬의 반대의 케이스로 데이터를 보조 기억장치(HDD, SSD)에 저장하고 일부 데이터만 주기억장치..

개발/CS 2021.12.11

알고리즘 - 1

1. 알고리즘이란? 이론적으로 컴퓨터를 사용한 문제 해결의 가능성이라는 측면에서 0개 이상의 입력과 1개 이상의 출력이 있어야 한다, 각 명령은 단순 명확해야 한다, 한정된 수의 단계를 거친 후 종료되어야만 한다, 모든 명령은 컴퓨터에서 실행 가능해야 한다.로 총 네 가지의 조건을 만족해야 한다. 하나의 문장으로 종합하자면 주어진 문제의 대한 해답으로 모호함 없이 간단하며 컴퓨터가 수행 가능한 유한개의 명령을 순서에 따라 구성한 것이다. 다만 컴퓨터로 해결할 수 있어도 처리 과정이 너무 오래 걸려 현실적으로 해결할 수 없는 문제도 있기에 효율성 또한 충분히 고려되어야 할 조건이다. 2. 자료구조와의 연관성 효율적인 프로그램을 위해서는 효율적인 알고리즘이 필요하며 효율적인 알고리즘을 위해 적합한 자료구조를..

개발/CS 2021.12.09