현재의 내가 미래의 나에게
close
프로필 배경
프로필 로고

현재의 내가 미래의 나에게

  • 분류 전체보기 (55)
    • Spring (11)
    • Database (1)
    • Java (3)
    • CI CD (2)
      • GitHub Action (1)
    • Docker (1)
    • Git, GitHub (6)
      • Git (3)
    • 개발 환경 설정 (4)
    • 운영체제 (3)
    • 인턴 (2)
    • 외주 (3)
    • 강의메모 (11)
    • 메모 (2)
    • 책 (4)
      • 자바 웹 개발 워크북 (2)
      • 오브젝트 (2)
    • 우아한 테크 코스 (1)
  • 홈
  • 태그
  • 방명록

[Spring] 비동기 프로그래밍 - ThreadPoolExcutor

비동기 프로그래밍이란? - Async 한 통신 - 실시간성 응답을 필요로 하지 않는 상황에서 사용 (ex. Notification, Email 전송, Push 알림) - Main Thread가 Task를 처리하는 게 아니라 Sub Thread에게 비동기로 처리 해야 되는 Task를 위임하는 행위라고 할 수 있다. 그러면 Main Thread는 알아서 자동으로 처리해줄텐데, Sub Thread는 어떻게 생성하고 관리를 할 수 있을까? 스프링 프레임워크를 기준으로 설명하면, 스프링에서 비동기 프로그래밍을 하기 위해서는 우선, ThreadPool을 정의할 필요가 있다. 왜? 스레드풀을 생성해야할까? 비동기는 앞서 말했듯 Main Thread가 아닌 Sub Thread에서 작업이 진행된다. 자바에서는 Threa..

  • format_list_bulleted Spring
  • · 2024. 4. 13.
  • textsms
[Spring] Profile 설정 (feat. profiles.active)

[Spring] Profile 설정 (feat. profiles.active)

Profile이 필요한 이유 실제 회사(현업)에서 개발을 할 때엔 N개의 Profile을 설정한다. (ex. local, dev, test, prod 등) Profile을 나누는 이유는 환경별로 설정해야 하는 Property 값들이 다르기 때문이다. 더불어 만약 환경별로 로깅 레벨을 다르게 두고 싶을 때 어떻게 해야할까? 이 때 profile을 사용하여 손쉽게 애플리케이션 동작을 조정할 수 있기에 profile을 알아둘 필요가 있다. Spring Profiles Spring Profiles는 애플리케이션 구성의 일부를 분리하고 특정 환경에서만 사용할 수 있도록 방법을 제공한다. 예를 들어, 개발 환경에서만 사용할 수 있는 Bean이 있고, 프로덕션용 Bean이 있을 수 있다. Profile을 사용하면 특..

  • format_list_bulleted Spring
  • · 2024. 4. 12.
  • textsms
[Spring] 스프링 부트 예외 처리(2) - @ControllerAdvice, @ExceptionHandler (feat. 프로젝트에 맞는 CustomException 만들고 처리하기)

[Spring] 스프링 부트 예외 처리(2) - @ControllerAdvice, @ExceptionHandler (feat. 프로젝트에 맞는 CustomException 만들고 처리하기)

예외가 발생했을 때 어떻게 처리하는 것이 좋은 방법일까? - 예외 복구 : 예외가 발생하면 예외 상황에 맞게 처리하여 다시 복구한다. (ex. try, catch) - 예외 회피 : 예외를 직접 처리하지 않고 예외를 다음(상위) 메소드에 위임한다. 즉, 나 대신 너가 처리해줘 (ex. throw) - 예외 전환 : 예외를 위임하긴 하지만 발생한 예외를 있는 그대로 위임하지 않고 적절한 예외로 전환하여 위임한다. ( 이렇게 주로 예외는 3가지 방식으로 처리할 수 있다. (ex. CustomException) 이 중에서 예외 복구에 대해 좀 더 자세히 살펴보자! 앞서 예외 복구 방식은 예외가 발생했을 때 try, catch를 사용하여 예외 상황을 대응하고 처리할 수 있다고 했다. 허나 실제로 프로젝트를 개발..

  • format_list_bulleted Spring
  • · 2024. 4. 12.
  • textsms
[Spring] 스프링 부트 예외 처리(1) - API Error Code 적용하기 (feat. API 공통 스펙)

[Spring] 스프링 부트 예외 처리(1) - API Error Code 적용하기 (feat. API 공통 스펙)

HTTP 통신의 Status 코드는 매우 한정적이다. HTTP 통신은 자체적으로 status 코드를 가지고 있다. (2xx, 4xx, 5xx) 하지만 이는 서비스를 구현할 때 많은 에러를 표현하기에는 매우 한정적이다. 예를 들어 "사용자를 못 찾는다", "사용자의 상태가 휴먼상태다", "회원탈퇴한 사용자다" 등 이러한 에러들은 Http Status를 가지고 설명하기엔 굉장히 힘들다. 그렇기에 서비스 내부의 status 코드를 정의하고 사용하여 여러 상황을 보다 구체적으로 표현할 필요가 있다. 더불어 오픈 API를 보면 API의 공통 스펙을 보통 가지고 있다. (클라이언트와의 약속된 통신 스펙을 정의) 따라서 이번엔 프로젝트의 공통 스펙을 정의하고 해당 클래스를 Wrapping해서 응답할 수 있도록 API..

  • format_list_bulleted Spring
  • · 2024. 4. 12.
  • textsms

[Spring] ObjectMapper 커스텀해서 사용해보기 (feat. serialization)

들어가기 스프링부트는 ObjecctMapper를 통해서 JSON과 객체 간의 데이터를 변환(직렬화와 비직렬화)한다. 이번엔 직렬화와 비직렬화가 무엇인지 그리고 ObjectMapper에 대해서 알아보고 직접 커스텀해서 사용하고자 한다. 우리가 네트워크 통신을 할 때 어떤 형태의 데이터를 주고 받을까? 네트워크 통신에서 데이터는 최종적으로 바이트 코드 형태로 전송된다. 다른 형태의 데이터(ex. 텍스트, 이미지, 비디오 등)도 결국은 전송을 위해선 바이트 스트림으로 구성되어 전송된다. JSON, XML과 같은 데이터 형식도 결국에는 바이트 스트림으로 변환되어 네트워크를 통해 송수신된다. 그렇기에 네트워크의 각 계층에서 추가되는 패킷들도 결국은 바이트 배열로 구성되어 있다. 이유는 네트워크 하드웨어와 프로토콜..

  • format_list_bulleted Spring
  • · 2024. 3. 20.
  • textsms

[Spring] Swagger

스웨거란? 스웨거는 API 문서화, 디자인, 빌드, 테스트 및 사용을 위한 오픈 소스 소프트웨어 프레임워크이다. RESTful API 서비스를 개발하고 문서화하는 데 도움을 주는 도구 모음이다. API 문서화: API의 자동화된 문서를 생성하고 표시할 수 있다. 이를 통해 API 엔드포인트, 요청 및 응답 형식, 매개변수, 인증 등을 포함한 API의 세부 정보를 시가적으로 제공한다. 인터랙티브한 API UI: 스웨거 UI를 통해 API를 테스트하고 상호작용할 수 있다. 개발자는 스웨거 UI를 통해 API 엔드포인트를 호출하고 요청을 보내며, 실시간으로 응답을 확인할 수 있다. 코드 생성: API를 기반으로 클라이언트 라이브러리 및 서버 스텁 코드를 자동으로 생성할 수 있다. 이를 통해 클라이언트 애플리케..

  • format_list_bulleted Spring
  • · 2024. 3. 19.
  • textsms
[Spring] 멀티모듈 (2) - 멀티모듈 프로젝트 진행시 생길 수 있는 이슈들 정리(feat. implementation, configuration, component scan)

[Spring] 멀티모듈 (2) - 멀티모듈 프로젝트 진행시 생길 수 있는 이슈들 정리(feat. implementation, configuration, component scan)

implementation은 의존성 전파가 되지 않는다. 문제 상황 db 모듈에는 Jpa 관련 dependency를 implementation으로 추가했다. api 모듈에서는 추가하지 않은 상태에서 사용하려고 하면 당연히 에러가 발생한다. 이유는 api 모듈에서는 jpa 관련 아무런 정보(의존성)가 없기 때문이다. 해결 방법 방법 1. api 모듈에도 jpa 의존성을 추가 (권장 o) dependencies { implementation project(':db') } 방법 2. db에 api 스코프로 의존성을 추가 (권장 x) // db 모듈의 build.gradle dependencies { api 'org.springframework.boot:spring-boot-starter-data-jpa' } ..

  • format_list_bulleted Spring
  • · 2024. 3. 19.
  • textsms
[Spring] 멀티 모듈 (1) - 스프링부트 프로젝트에 멀티모듈 설정하기 (feat. build.gradle)

[Spring] 멀티 모듈 (1) - 스프링부트 프로젝트에 멀티모듈 설정하기 (feat. build.gradle)

Gradle or Maven로 빌드를 하는 이유 로컬 환경에서 개발할 때는 인텔리제이처럼 IDE의 도움을 받아서 서버를 띄울 수 있다. 하지만 실제 운영 서버에선 IDE의 도움을 빌릴 수 없고 Jar 파일을 넘겨서 실행시켜야 한다.그렇기에 빌드 툴(gradle, manve 등)을 사용해서 Jar 파일을 만들어서 운영 서버로 넘겨서 그 파일을 실행시켜야 한다. 멀티 모듈 구조에선 Gradle 관련 수정을 해야하는 부분( tasks.bootJar, tasks.jar )이 있는데 이를 한번 살펴보자! 우선 원하는 프로젝트 구조를 만들자 delivery-service ㄴ api ㄴ db api는 db의 클래스와 메소드들을 알 수 있도록 설정하기 (의존성 추가) api 모듈 추가하기 root 디렉토리에서 새로운 ..

  • format_list_bulleted Spring
  • · 2024. 3. 19.
  • textsms
  • navigate_before
  • 1
  • 2
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (55)
    • Spring (11)
    • Database (1)
    • Java (3)
    • CI CD (2)
      • GitHub Action (1)
    • Docker (1)
    • Git, GitHub (6)
      • Git (3)
    • 개발 환경 설정 (4)
    • 운영체제 (3)
    • 인턴 (2)
    • 외주 (3)
    • 강의메모 (11)
    • 메모 (2)
    • 책 (4)
      • 자바 웹 개발 워크북 (2)
      • 오브젝트 (2)
    • 우아한 테크 코스 (1)
최근 글
인기 글
최근 댓글
태그
  • #map-get()
  • #Psuedo-Element
  • #Sass
  • #flexbox
  • #pos-center
  • #mixin_position
  • #그리드_시스템_훈련
  • #$map( key: value )
  • #Sass-Text Style
  • #type-of
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바