안녕하세요 오늘은 백엔드 시스템을 구축할 때 대표적으로 사용하는 Spring Boot와 Node js 그리고 PHP의 특징에 대해서 알아보고 추후 투다에 어떤 것을 적용할 지 알아보는 시간을 가져보도록 하겠습니다.현재 투다는 PHP로 백엔드 시스템이 이루어져 있습니다.
안녕하세요! 오늘은 저번 시간에 이어서 Spring boot를 사용하여 API 서버를 개발할 때 사용할 언어에 대해 알아보는 시간을 갖도록 하겠습니다.우선 Spring boot에서는 대표적으로 자바와 코틀린을 제공합니다. 코틀린의 경우 자바와 100% 호환이 가능하며
안녕하세요 오늘은 새로운 투다 백엔드 서버를 위한 DB 연결 방법에 대해 포스팅하려고 합니다. 대표적인 연결 방법인 jdbc와 jpa, 그리고 mybatis에 대해 알아보겠습니다.출처 : https://thefif19wlsvy.tistory.com/249우선
안녕하세요 오늘은 Spring boot의 최신 버전인 3.0.1 버전의 특징과 새롭게 추가된 AOT에 대해서 JIT과의 비교를 통해 알아보는 시간을 갖도록 하겠습니다.출처 : https://docs.spring.io/spring-boot/docs/3.0.0/r
안녕하세요 오늘은 Spring Boot에서 사용하는 어노테이션들에 대해서 정리해보려고 합니다. 우선 어노테이션이란, 소스 코드에 추가해서 사용할 수 있는 메타 데이터, 즉 컴파일 및 실행 과정에서 코드를 어떻게 처리해야 하는지를 알려주기 위한 추가 정보입니다. Spr
안녕하세요 오늘은 Spring Boot에서 사용하고 있는 디자인 패턴에 대해서 포스팅해보도록 하겠습니다.출처 : https://velog.io/@sangmin7648/Spring%EC%9D%98-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A
안녕하세요 오늘은 Spring Boot에서 Controller를 생성해보고 이를 테스트해보는 방법에 대해서 포스팅하려고 합니다. 출처 : https://junit.org/junit5/docs/current/user-guide/ 우선 저는 어노테이션으로 간단하게 제공
안녕하세요 오늘은 Spring JDBC를 연동해보면서 단위 테스트까지 진행하는 내용에 대해서 포스팅해보도록 하겠습니다.출처 : https://velog.io/@seungho1216/Spring-BootController-Service-Repository%EC%
안녕하세요 오늘은 Insert/Update 쿼리와 트랜잭션 처리하는 법에 대해서 포스팅하도록 하겠습니다.우선 트랜젝션이란, 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위입니다. 쉽게 말씀드리자면 여러 쿼리들이 순차적으로 실행되는 하나의 작업 묶음이라고 보시면
안녕하세요 오늘은 Spring Boot에서 Redis를 적용하는 내용에 대해서 포스팅하려고 합니다.현재 투다의 경우 인메모리DB로 Redis를 사용하고 있습니다. Memcached에 비해 다양한 기능을 제공하며 싱글 스레드 방식으로 동작하여 가볍기 때문입니다. 이런 R
안녕하세요 오늘은 Spring Security 적용기에 대해서 포스팅해보도록 하겠습니다.우선 로그인 방식에는 크게 세션을 이용한 방식과 jwt를 이용한 방식이 있습니다. 출처 : https://velog.io/@gusdnr814/%EB%A1%9C%EA%B7%B
안녕하세요 오늘은 Spring Boot에서 메일을 발송하는 방법에 대해서 포스팅하도록 하겠습니다. 현재 투다에는 메일로 비밀번호 찾기 기능을 제공하고 있는데, 이 부분을 Spring Boot에서 어떤 식으로 구현할 지 알아보도록 하겠습니다.먼저 메일이 어떤 방식으로 발
안녕하세요 오늘은 에러 메시지를 Slack에서 확인하는 내용에 대해서 포스팅해보도록 하겠습니다. 기존 투다 서비스의 경우 메일로 에러를 확잏나고 있었는데 메일 자동 동기화 속도가 느려 빠르게 받아볼 수 없어서 Slack 연동을 결정했습니다.우선 Slack에 로그인하신
안녕하세요 오늘은 Spring Boot에 AOP 적용 실습에 대해 포스팅해보도록 하겠습니다.AOP(Aspect Oriented Programming)란 관점 지향 프로그래밍으로, 각 계층에서 공통적으로 담당하는 로직(=횡단 관심사)를 처리하는 방법론입니다. 부가 기능이
안녕하세요 오늘은 Spring Boot에서 Validation 처리하는 내용에 대해 포스팅하도록 하겠습니다.우선 Validation이란 올바르지 않는 데이터를 검증하여 보안을 강화하기 위하여 사용되는 데이터 검증입니다. 이를 통해 잘못된 요청으로 인한 보안이 강화될 뿐
안녕하세요 오늘은 Spring Boot에서 어떻게 정적 데이터에 접근할 수 있는지에 대해 포스팅하도록 하겠습니다.현재 투다 서비스의 경우 스티커, 기본 프로필, 게시글 속지 등 기본적인 이미지들을 서버 자체적으로 보관하여 제공하고 있습니다. 따라서 기존 PHP 방식에서
안녕하세요 오늘은 Validation을 효과적으로 진행하기 위한 방법에 대해 포스팅해보도록 하겠습니다.우선 기존 방식의 경우 controller 내부에 직접 Validation을 진행하였습니다. 그러다보니 controller 내부에 API가 많아짐에 따라 control
안녕하세요 오늘은 Spring Boot에서 다른 서버와 통신할 수 있는 방법에 대해 알아보고 이를 구현해보는 내용에 대해 포스팅하도록 하겠습니다.Spring Boot에서 HTTP 통신을 하는 방법은 크게 3가지입니다.HttpURLConnectionHttpClientRe
안녕하세요 오늘은 Spring Boot에서 JWT를 커스텀하여 원하는 정보를 내부에 추가하는 작업에 대해 포스팅하려고 합니다.우선 현재 인증/인가 프로세스에 대해 살펴보면@Configuration 클래스 내부에 SecurityFilterChain 클래스를 생성 및 수동
안녕하세요 오늘은 MockMvc 객체에 필터를 적용하는 방법에 대해 포스팅해보도록 하겠습니다.저번 포스팅에서 커스텀 필터를 만들어 적용하는 과정에서 테스트 시 필터가 제대로 적용되지 않는 문제가 있었습니다.문제 해결은 단순했습니다. 바로 생성한 MockMvc 클래스에
안녕하세요 오늘은 Spring Boot에서 헤더 검증을 위한 필터 작업에 대해서 포스팅하도록 하겠습니다.위의 사진은 스프링 부트 공식 문서에서 발췌한 HttpServletRequest 인증 과정입니다. 검증 과정을 보시면 다음의 흐름으로 진행됩니다.SecurityFil
안녕하세요 오늘은 기존에 작성한 생성자들을 Static Factory Method로 변환하는 작업을 진행해보겠습니다.우선 생성자와 정적 팩토리 메서드에 대해 알아보겠습니다. 생성자(Constructor)는 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드입니다. 흔
안녕하세요 오늘은 Spring Boot의 빈을 주입하는 싱글톤 방식과 Java의 static 방식의 차이와 적용 범위에 대해서 알아보도록 하겠습니다.결론부터 말씀드리자면, static의 경우 JVM 클래스 로더 기준으로, Spring Boot의 빈을 주입하여 객체를 참
안녕하세요 오늘은 Spring Boot의 Response들을 Builder Pattern을 이용하여 유연하게 작성하는 법에 대해서 포스팅하도록 하겠습니다.API 서버를 구축하다보면 API별 Response가 제각각이기 때문에 Spring Boot에서 이런 모든 API들
안녕하세요 오늘은 ConstraintValidator를 이용한 Validation 방식에 대해 알아보겠습니다. 이번 벨리데이션 방식의 경우 어노테이션을 이용하여 검증이 필요한 값에 설정한 후 어노테이션이 참조하는 커스텀한 ConstraintValidator를 이용하여
안녕하세요 오늘은 M1에서 Spring Boot에서 부하 테스트를 진행하는 Jmeter를 사용하는 방법에 대해서 알아보겠습니다.M1 맥의 경우 (과거보다는 많이 좋아졌지만) 여전히 소프트웨어 호환성에 문제가 있어 윈도우나 리눅스에서 돌아가는 방식과 다른 경우가 있습니다
안녕하세요 오늘은 Spring Boot의 비동기 처리 방식에 대해서 알아보도록 하겠습니다. https://velog.io/@gale4739/Spring-Boot-Slack-%EC%A0%81%EC%9A%A9with-ThreadPoolTaskExecutor 저번 게시글에
안녕하세요 오늘은 Spring Boot에서 Bean의 동작 원리에 대해 알아보면서 클래스 final 작업을 진행했을 때의 장점에 대해서도 같이 알아보는 시간을 갖겠습니다.우선 Bean에 대해서 알아보겠습니다. Bean이란 Spring IoC(제어의 역전 : 객체의 생성
안녕하세요 오늘은 Spring Boot의 클래스들을 Interface - 골격 구현 클래스 - 클래스 구조로 변경하는 작업을 진행해보겠습니다.이펙티브 자바의 18~25번 아이템을 프로젝트에 적용시켜보았습니다. 기존 클래스의 경우 Spring Boot에서 기본적으로 제공
안녕하세요 오늘은 Spring Boot에서 Enum을 활용한 코드 리팩토링 작업을 진행해보겠습니다.enum이란 열거형을 정의하는 키워드로, int 또는 문자열을 단순 나열하는 대신 enum을 통해 쉽게 관리할 수 있습니다. enum은 다음의 장점을 가집니다.가독성 :
안녕하세요 오늘은 Spring Boot에서 Generic을 적용시키는 방법에 대해 포스팅해보도록 하겠습니다.우선 제네릭이란 데이터의 타입을 일반화하는 방법입니다. Java 5부터 지원하는 방식으로 이전에는 객체를 꺼낼 때마다 형변환을 해야 했는데 제네릭을 이용해 유연하
안녕하세요 오늘은 람다식과 메서드 참조 방식을 이용해서 코드를 가독성있게 줄여보는 작업을 진행하도록 하겠습니다.람다식에 대해 알아보기 전 익명 함수에 대해 먼저 알아보아야 합니다. 익명 함수란 이름이 없는 함수로서, 함수의 정의와 동시에 사용되는 함수입니다. 익명 함수
안녕하세요 오늘은 기존 반복문 코드를 스트림으로 변환하는 작업에 대해 포스팅해보도록 하겠습니다.우선 스트림에 대해 먼저 알아보겠습니다. 스트림이란 람다식과 같이 자바8부터 도입된 기능으로, 컬렉션이나 배열 등의 데이터 요소를 처리하는 연산을 지원합니다. 스트림 파이프라
안녕하세요 오늘은 이펙티브 자바를 기반으로 하여 기존의 예외 처리 프로세스를 고도화하는 작업을 진행해보겠습니다. 사실 이번 고도화 작업의 경우 최대한 예외를 던지지 않는 방식으로 변경하려고 하였으나 현재 지식으로는 코드가 너무 복잡해져서 현재 프로세스의 안정성을 향상시
안녕하세요 오늘은 스프링 부트에서 어떻게 다중 요청을 처리하는지에 대해 알아보겠습니다. 이번에 이펙티브 자바의 동시성 항목을 읽으면서 스프링 부트에서는 어떤 식으로 다중 요청을 처리하는지, 그리고 스프링 부트는 과연 thread-safe한지에 대해 궁금해져 이번 포스팅
안녕하세요 오늘은 프로토콜 버퍼를 이용하여 RedisTemplate 직렬화 부분을 대체하는 작업에 대해 포스팅해보도록 하겠습니다.우선 직렬화에 대해 알아보도록 하겠습니다. 자바에서 직렬화란 객체를 바이트 스트림으로 인코딩하는 프로세스를 의미합니다. 이렇게 변환된 바이트
안녕하세요 오늘은 Spring Security 적용 시 인증이 제대로 이루어지지 않았던 오류에 대해서 수정하는 작업을 진행하려고 합니다.발생한 이슈에 대해 설명드리겠습니다. Spring Security를 적용한 상태로 테스트 환경에서는 정상적으로 동작하였으나 실제 배포
안녕하세요 이번 시간에는 Redis를 사용하는 API의 성능을 개선하는 방법에 대해서 포스팅하도록 하겠습니다.발생한 이슈에 대해 먼저 말씀드리겠습니다. Redis 접속 로직이 복잡해짐에 따라 Redis를 사용하는 7개의 API 실행 시 약 1600ms 정도의 속도를 보
이전 포스팅 링크 : https://velog.io/@gale4739/Spring-Boot-%EC%98%A4%EB%A5%98-%EA%B0%9C%EC%84%A0-1.-%EC%9D%B8%EC%A6%9D-%EB%A1%9C%EC%A7%81-%EC%88%98%EC%A0
안녕하세요 이번 시간에는 여러 요청을 동시에 처리할 때 Redis의 성능을 향상시킬 수 있는 방법에 대해서 알아보도록 하겠습니다.결론적으로 말씀드리자면 비동기 방식으로 Redis에 접속하면 여러 요청을 동시에 처리할 때 Redis의 성능을 크게 향상시킬 수 있습니다.
안녕하세요 이번 시간에는 현재 서비스에 JPA를 적용하기 위한 기본 설정 작업을 진행하는 부분에 대해서 포스팅해보도록 하겠습니다.우선 JPA란 Java Persistence API의 약자로 자바를 사용하여 데이터베이스와 상호작용하는데 사용되는 ORM(Object-Rel
안녕하세요 이번 시간에는 Spring Boot에서(Spring Boot 외에도 적용될 수 있는 내용입니다!) 캐싱을 진행할 때 주의할 점에 대해서 포스팅하도록 하겠습니다.우선 용어를 정리해야 합니다. 캐시와 캐시 항목은 다르다는 개념을 알고 계시면 됩니다. 캐시 항목은
안녕하세요 이번 시간에는 JpaRepository 사용법에 대해 조금 더 깊게 알아보는 시간을 갖도록 하겠습니다.먼저 Jpa 사용 시 FK 설정된 테이블 엔티티를 생성하는 방법에 대해 알아보겠습니다. 아래는 유저 정보와 공지사항 정보를 가지고 있는 UserAnnounc
안녕하세요 이번 시간에는 Kafka를 활용하여 FCM 전송 API의 처리 속도를 향상시키는 방법에 대해 알아보겠습니다.Kafka는 메시지 큐의 일종입니다. 메시지 큐란 컴퓨터 시스템 또는 어플리케이션 간에 비동기적으로 데이터나 작업을 교환하기 위한 통신 패턴입니다. 발
안녕하세요 이번 시간에는 Kafka에서 이미 처리한 토픽이 다른 API 실행 시 중복되어 처리되는 오류를 해결하는 포스팅을 해보도록 하겠습니다.우선 발생한 오류를 먼저 말씀드리겠습니다. 다이어리 초대 요청을 보냈을 때 프로듀서에서 FCM 관련 토픽을 전달하면 컨슈머에서
안녕하세요 이번 시간에는 커넥션과 커넥션 풀에 대해, 그리고 적절한 커넥션 풀과 Spring Boot에서 이를 어떤 식으로 적용하면 좋을지에 대해 알아보겠습니다.먼저 커넥션이란 DB와 어플리케이션 간의 통신 경로로 다음과 같은 역할을 수행합니다.1\. 통신 경로 설정2