본문 바로가기
반응형

분류 전체보기96

[스프링] Executable jar 파일 만들어서 실행해보기 사이드 프로젝트 개발을 마무리하고 다른 환경에서 실행을 시켜보고 싶어졌다. 개발은 MacOS 노트북에서 진행했고, 만든 어플리케이션을 항상 켜두고 싶어서 집에 있는 데스크톱 Windows PC 에서 실행시켜보고 싶었다. 그 과정을 기록해보고자 한다. Executable jar 가 뭐지? 핵심은 executable jar (실행가능한 jar) 파일을 개발한 환경에서 만들고 그 파일을 다른 환경에서 실행하는 것이다. Executable jar 파일은 메인 클래스와 어플리케이션이 의존하고 있는 다양한 라이브러리, 의존성들을 함께 포함하고 있는 파일이다. 다른 용어로는 fat jar 라고도 불린다. 생성은 어떻게 하지? 스프링부트 환경에서 어플리케이션을 실행하는 클래스 (예: SampleApplication.j.. 2023. 2. 10.
[티스토리] highlight.js 를 활용해서 티스토리 코드블럭 꾸미기 아래를 참고하여 HTML 편집까지 접근해보자 티스토리 > 블로그 관리 > 꾸미기 탭 > 스킨 편집 > html 편집 highlight.js 에 가서 원하는 테마를 골라오자 원하는 테마의 이름이 예를 들어 "Atom One Dark" 라면, "atom-one-dark" 형태로 변경한다. 전체 소문자화 띄어쓰기는 - 로 변경 아래 스크립트를 HTML 편집기에 추가 아래 스크립트에서 선택한 테마의 이름으로 변경해주어야 한다. (atom-one-dark 부분을 바꾸기) 아래 사진 참고 2023. 2. 10.
[JPA] @ManyToOne, @OneToMany 를 활용하기 이 어노테이션들은 언제 사용하는거지? 스프링에서 1:N 관계의 테이블을 엮어야 할 때 사용하게 된다. 예시 Order (주문) 엔티티와 OrderItem (주문 아이템) 엔티티는 @OneToMany, @ManyToOne 어노테이션을 활용하여 서로 1:N 관계로 묶여 있다. 주문 1개에 N 개의 상품이 존재할 수 있다. 엔티티 구현 Order (주문) @Entity @Table(name="orders") public class Order { @Id @Column(name="order_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany( cascade = CascadeType.ALL, mappedBy = "o.. 2023. 2. 10.
UriComponentsBuilder 한글 적용이 잘 안될 때 HTTP 요청을 위해 UriComponentsBuilder 를 활용했다. 코드는 다음과 같다. var a = UriComponentsBuilder.fromUriString("http://external-service.com") .path("/api/v1/sample") .queryParam("query", "A B") .toUriString(); 이렇게 해서 요청을 날려보니 다음과 같이 요청이 날아갔다. GET http://external-service.com/api/v1/sample?query=A%20B 원하던게 이게 아닌데.. "A B" 처럼 스페이스가 포함되어야 하는데 인코딩이 잘못되는건지 "A%20B" 으로 요청이 날아가서 제대로된 응답을 받지 못했다. UriComponentsBuilder 작동 .. 2023. 2. 9.
[스프링] H2 데이터베이스 사용하기 H2 데이터베이스는? 빠르고, 오픈소스이며, JDBC API 를 지원 자바로 작성된 관계형 (relational) 데이터베이스 인메모리 테이블 또는 디스크 기반 테이블 둘 다 지원 인메모리 (In-memory): 어플리케이션이 종료될 때 DB 가 초기화 됨 디스크 기반 (Disk): 어플리케이션이 종료되어도 데이터가 디스크에 저장되어 재사용 가능 브라우저 기반 콘솔 지원 (브라우저에서 쿼리를 날릴 수 있음) 표준 SQL 대부분 지원 주로 로컬 또는 테스트 환경에서 사용 다양한 기능 지원: 트랜잭션, Fulltext search, 암호화된 테이블 등 자세한 내용은 공식 홈페이지를 참고하자. 의존성 implementation("org.springframework.boot:spring-boot-starter-.. 2023. 2. 9.
[스프링] 멀티 모듈 환경에서 application.yml 사용하기 스프링에서 프로젝트 환경 설정은 다양하게 관리할 수 있다. 그 중 하나가 application.properties, application.yml 과 같은 파일을 활용하는 것인데, 로컬/개발/운영 등 다양한 환경에 따라 다른 설정을 적용하기 위해 주로 사용한다. 스프링은 어플리케이션이 시작될 때, application.yml 파일을 찾고, 현재 환경에 맞는 설정과 옵션을 읽어 시스템에 적용한다. 물론, 파일 하나에 모든 설정을 넣어서 설정을 할 수도 있지만 프로젝트가 커지고 담아야 하는 설정이 많아지다 보면 파일을 분리해서 관리하는 것이 효율적이다. 또한, 멀티 모듈 환경에서는 어쩔 수 없이 분리가 될 수 밖에 없다. 그럼 스프링은 application.yml 파일 하나만을 읽을텐데, 파일을 분리해 여러 .. 2023. 2. 9.
[오픈소스] MapStruct 소개와 사용법 클린 아키텍쳐, 멀티 모듈, 많은 계층 등으로 구성되어 있는 어플리케이션을 개발하다 보면 데이터 모델 간 객체 변환이 꼭 필요하다. 이 때, 한땀한땀 필드를 맵핑해줄 수도 있지만 이 작업을 대신 해주는 오픈소스인 MapStruct 에 대해 알아보도록 하자. 예시 소개 아래와 같은 구조로 프로젝트가 설계되어 있다고 가정을 해보자. 내부 Domain 에서 사용하는 클래스는 Blog, application-layer 와 web-layer 가 서로 통신을 할 때에는 BlogDto, 그리고 외부 HTTP 통신을 할 땐 NaverBlogResponse, KakaoBlogResponse 등으로 데이터를 주고 받을 수 있다. 모두 다 같은 의미의 데이터를 포함하고 있지만 각 계층을 구분짓기 위해 클래스를 분리했다. 이.. 2023. 2. 8.
[스프링] @Valid 사용과 테스트 케이스 작성하기 RestController 에서 @RequestBody 등을 통해 데이터를 받을 때, 유효성 검증을 위해 @Valid 어노테이션을 주로 사용한다. 필수 값이 입력되어 있는지, 숫자 값의 boundary 내에 포함되어 있는지, 문자열의 길이가 유효한지 등을 확인할 수 있다. 의존성 추가 아래 의존성을 추가하면 @Valid 어노테이션을 사용해서 유효성 검증을 할 수 있다. implementation 'org.springframework.boot:spring-boot-starter-validation' 활용 방법 아래 컨트롤러의 SearchBlogRequestBody 부분을 보면 객체 앞부분에 @Valid 어노테이션이 부여되어 있다. @RestController public class BlogSearchCon.. 2023. 2. 6.
반응형