분류 전체보기 8

JPA Buddy를 사용해서 DDL을 JPA 엔티티 클래스로 변환하기

저같은 경우는 회사에 입사하고 기존에 운영하던 서비스를 Spring Boot Project로 마이그레이션을 상황이 있었어요, 그때 Spring Boot JPA 생태계는 기본적으로 ORM을 사용하기 위해 기존에 DB에 있던 테이블을 엔티티 클래스로 만들어줘야 하는 일이 생겼는데 테이블이 40개가량 되니까 손수 옮기기가 힘들거 같더라고요 그래서 검색해본 결과 JPA-Buddy라는 Extentions를 사용해 보았더니 엄청 좋게 사용한 경험이 있어서 본 포스팅을 작성하게 되었습니다. Intellij IDEA를 사용하시는 분은 market place에서 JPA Buddy검색하시면 해당 Extention을 발견하실 수 있습니다. 다운로드하고 IDE를 재실행 하고 엔티티 클래스를 만들 패키지에 command+n을 ..

카테고리 없음 2023.04.06

당신이 작성한 자바 코드가 실행되기 까지의 과정들 - 클래스 로더 편

안녕하세요. 이 글을 쓰게 된 계기는 특정 분야에 국한되지 않고 JVM 생태계 언어를 사용중이신 분들에게 도움이 됐으면 해서 작성합니다. 제 글에 문제점이 있거나 수정해야 될 부분이 있다면 댓글로 피드백 부탁드립니다. 아래는 JVM의 구조를 나타낸 그림이에요 중간중간 이해가 안되면 그림을 보고 flow를 이해보시는것도 좋을거 같아요. 우선 예제를 위해 간단한 자바 파일을 하나 만들고 아래와 같이 작성해 줄게요. public class App { public static void main(String[] args) { } } 이제 JVM을 통해서 이 자바파일을 한번 실행시키는 과정을 봐볼게요 첫번째, 클래스 로더가 제가 작성한 App.class를 로딩합니다. 로딩이란 과정은 클래스 로더가 .class 파일..

카테고리 없음 2022.12.22

CICD 파이프 라인 구축중 Code Deploy Agent 관련 에러

필자는 EC2 + S3 + Code Deploy + Github Action을 사용하여 CICD 파이프 라인 구축중 CD Workflow에서 S3에 project 소스들을 zip파일로 압축시켜 s3 bucket에 업로드한 후 Code Deploy가 잘 다운로드를 받아 배포를 잘 진행하고 있는지 aws console에서 확인중 다음과 같은 에러를 마주하였다. CodeDeploy agent was not able to receive the lifecycle event. Check the CodeDeploy agent logs on your host and make sure the agent is running and can connect to the CodeDeploy server. 구글링을 10분 정도 하..

카테고리 없음 2022.12.01

@Value로 프로퍼티 바인딩을 한 프로퍼티를 참조해서 또다른 프로퍼티를 생성하는 방법

안녕하세요. 이번에도 제가 마주했던 에러를 가지고 왔습니다. 저는 kotlin/spring 환경에서 JWT로 인증인가를 구현하던 도중 기존의 base64EncodedSecretKey를 parameter로 받는 signWith method들이 deprecated가 되었기 때문에 deprecated가 되지 않은 Key parameter를 사용하는 방법으로 구현하던 도중 에러를 마주했습니다. 코드를 보시면 class의 body에서 secretKey를 프로퍼티 바인딩 해서 해당 base64EncodedSecretKey를 참조해서 Key를 생성하는 코드인데요. 기본적으로 kotlin은 class의 body안에서는 값이 할당된 변수만 들어갈 수 있습니다. 그렇기에 class의 body안에 프로퍼티 바인딩을 한 se..

카테고리 없음 2022.10.04

Kotlin환경에서 WebClient 사용시 Multi HttpHeader 설정하기

안녕하세요. 이번 프로젝트를 진행중에 Kotlin/Spring 환경에서 Kakao Oauth2로 소셜로그인 서비스를 구현하는 일이 있어서 구현하던 도중 WebClient로 다중 Header를 설정해주는데 문제가 발생해서 이 문제를 해결하는 방법에 대해 포스팅 하려고 합니다. 제 포스팅을 통해서 여러분들이 해답을 찾으셨으면 좋겠네요. 서론이 길었습니다. 시작하도록 하겠습니다! 제가 에러를 마주한 환경은 다음과 같습니다. WebClient 객체를 생성해서 kauth host에 token을 요청하는 WebClient를 짜던 도중 header lambda에 contentType과 acceptCharset에 대한 파라미터를 set해주려 하는데 빨간색 밑줄과 함께 에러가 감지되었습니다. 무슨 문제인가 하고 Erro..

카테고리 없음 2022.09.27

github actions 으로 CI중 trouble shooting 회고

오늘 나는 새로운 프로젝트를 시작하였다. Main Skill Set은 Kotlin/Spring Boot, JPA, H2(prod 서버는 MariaDB 예정)으로 개발할 예정이었다. 나는 초기에 개발편의성 향상을 위해 AWS연동이 되지 않은 초기 CI를 설계하였다. CI의 주요 step은 Setup JDK Gradlew 권한부여 Clean Build 테스트 결과 pr comment로 notee 로 이루어져 있었다 순조롭게 진행되고 있었고 CI결과도 당연히 성공일 줄 알았다. 하지만 Clean Build step에서 문제가 발생했다. 해당 Exception은 다음과 같았다. 왜 Exception이 발생하는지 도무지 알 수 없었다. Local에선 contextLoads() Test Case와 Clean Bui..

카테고리 없음 2022.09.21

스프링 IOC와 DI

안녕하세요! 오늘 알아볼 개념은 바로 Spring의 3대요소 IOC, PSA, AOP중 IOC와 이에 밀접한 관련이 있는 DI에 대해 알아볼거에요. 그럼 지금 바로 시작해볼게요. 자 먼저 IOC란 무엇일까요? IOC IOC란 Inversion of control, 제어의 역전 이에요 만약 IOC없이 인스턴스를 생성한다고 해볼게요! 그렇다면 MemberService memberService = new MemberService() 이런식으로 인스턴스를 생성할거에요! 객체를 생성하는법은 해당 객체의 생성자의 스펙에따라 달라지지만 이 예제에서는 기본생성자로 생성을 할게요! 이렇게 객체를 생성할때 new Class부분을 개발자가 직접 주입하게 되는데요 이럴경우의 단점이 무엇일까요? 바로 객체지향의 SOLID원칙중..

Spring 2022.05.01

DB 트랜잭션 격리 수준 [ isolation level ]

안녕하세요 여러분은 트랜잭션의 격리 수준에 대해 알고계신가요? 그전의 DB 트랜잭션에 대해 잠깐 말하자면 데이터들이 처리되는 작업의 단위입니다. 예를 들어 상점에서 한가지의 물품을 사려합니다. 이때 일어나는 쿼리들을 살펴볼까요? 사용자의 계좌에서 물품의 가격만큼 차감하는 쿼리 상품의 재고가 한개 차감하는 쿼리 이정도로 예를 들어볼게요. 이렇게 쿼리들로 모여진 한 작업의 단위를 트랜잭션이라고 표현합니다. 이제 트랜잭션을 알았다는 가정하에 각설하고 본문을 설명해보겠습니다. 그래서 트랜잭션 격리 수준이란게 뭘까? 바로 트랜잭션들끼리 얼마나 고립되어 있는지 그 수준을 레벨로 나눈것입니다. 트랜잭션 격리 레벨은 Read Uncommitted - 0 단계 Read Committed - 1단계 Repetable Re..

DB 2022.04.20