반응형 Book38 Clean Code - 함수를 안전하고 간결하게 작성하기 Chapter 03. 함수 1. Solid 객체 지향 설계의 5가지 원칙 SRP : 단일 책임 원칙(한 클래스는 하나의 책임만 가져야한다) 클래스는 하나의 기능만 가지며, 어떤 변화에 의해 클래스를 변경해야하는 이유는 오직 하나뿐이어야한다. SRP 책임이 분명해지기 때문에, 변경에 의한 연쇄 작용에 자유로워질 수 있다. 가독성 향상과 유지보수가 용이해진다. OCP : 개방-폐쇄 원칙(소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀있어야한다) 변경을 위한 비용은 가능한 줄이고, 확장을 위한 비용은 가능한 극대화해야한다. 요구사항의 변경이나 추가 사항이 발생하더라도, 기존 구성요소에는 수정이 일어나지 않고, 기존 구성 요소를 쉽게 확장해서 재사용한다. 객체 지향의 추상화와 다형성을 활용한다. LSP :.. Book/Clean Code 2024. 3. 25. Clean Code - 깨끗한 코드와 의미 있는 이름 Chapter 01. 깨끗한 코드 나쁜 코드 성능이 나쁜 코드 불필요한 연산이 들어가서 개선의 여지가 있는 코드 의미가 모호한 코드 이해하기 어려운 코드 네이밍과 그 내용이 다른 코드 중복된 코드 비슷한 내용인데, 중복된 코드 -> 해당 코드는 버그를 발생시킬 수 있다. 나쁜 코드가 좋지 않은 이유 나쁜 코드가 좋지 않은 이유로는 3가지의 예시가 있습니다. 첫 번째는 깨진 유리창 법칙입니다. 즉, 나쁜 코드는 깨진 유리창처럼 계속 나쁜 코드를 만들어지도록 합니다. 두 번째는 생산성 저하입니다. 나쁜 코드는 팀 생산성을 저하시킵니다. 기술부채를 만들어서 수정을 더 어렵게 합니다. 세 번째는 새로운 시스템을 만들어야한다 입니다. 현시스템을 유지보수하며 대체할 새로운 시스템 개발은 현실적으로 매우 어렵기 때문.. Book/Clean Code 2024. 3. 21. 스프링 시큐리티(Spring Security) 구현(of. 회원가입, 로그인) 회원가입과 로그인 구현 스프링 시큐리티 설정 후에 회원가입과 로그인 구현하는 것에 대해 알아보겠습니다. 회원가입 구현 SignService 인터페이스 구현 public interface SignService { /** * 회원 가입 */ SignUpResultDto signUp(String id, String password, String name, String role); /** * 로그인 */ SignUpResultDto signIn(String id, String password) throws RuntimeException; } SignServiceImpl 클래스 (회원 가입) @Override public SignUpResultDto signUp(String id, String password, .. Book/스프링부트 핵심가이드 2023. 12. 8. 스프링 시큐리티(Spring Security) 구현(of. SecurityConfiguration) 스프링 시큐리티 구현 스프링 시큐리티와 관련된 설정 방법에 대해 알아보겠습니다. SecurityConfiguration 구현 SecurityConfiguration 클래스 [HttpSecurity] @Configuration @RequiredArgsConstructor public class SecurityConfiguration extends WebSecurityConfigurerAdapter { private final JwtTokenProvider jwtTokenProvider; @Override protected void configure(HttpSecurity httpSecurity) throws Exception { httpSecurity.httpBasic().disable() .csrf()... Book/스프링부트 핵심가이드 2023. 12. 6. 스프링 시큐리티(Spring Security) 구현(of. Jwt Token) 스프링 시큐리티 구현 토큰값(JWT) 을 활용하여 스프링 시큐리티를 적용하기 위한 컴포넌트에 대해 알아보겠습니다. JWT 의존성 추가(Maven -> pom.xml) org.springframework.boot spring-boot-starter-security io.jsonwebtoken jjwt 0.9.1 스프링 시큐리티는 기본적으로 UsernamePasswordAuthenticationFilter를 통해 인증을 수행하도록 구성되어있다. 해당 필터는 인증이 실패하면 로그인 폼이 포함된 화면을 전달한다. UserDetails와 UserDetailsService 구현 User Entity 생성 @Getter @Setter @Entity @NoArgsConstructor @AllArgsConstructor.. Book/스프링부트 핵심가이드 2023. 12. 6. 스프링 시큐리티(Spring Security)와 JWT 서비스 인증과 인가 보안과 관련된 용어와 개념 및 스프링에 보안을 적용할 때 사용하는 스프링 시큐리티(spring security)를 알아보겠습니다. 보안 용어 인증(authentication) 사용자가 누구인지 확인하는 단계를 의미한다. 인증의 대표적인 예시(ex. 로그인) 로그인은 데이터베이스에 등록된 아이디와 패스워드를 사용자가 입력한 아이디 및 비밀번호를 비교해서 일치 여부를 확인하는 과정이다. 로그인에 성공하면 애플리케이션 서버는 응답으로 사용자에게 토큰(token)을 전달한다. 로그인에 실패하면 사용자는 토큰을 전달받지 못해서 원하는 리소스에 접근할 수 없게 된다. 인가(authorization) 인증을 통해 검증된 사용자가 애플리케이션 내부의 리소스에 접근할 때 사용자가 해당 리소스에 접근할.. Book/스프링부트 핵심가이드 2023. 12. 5. 스프링부트를 이용한 서버 간의 통신(of. WebClient) 서버 간의 통신 다른 서버가 API를 호출해서 사용할 수 있게 구성되어 웹 요청을 보내고 응답 받을 수 있게 도와주는 "WebClient"에 대해 알아보겠습니다. WebClient 일반적으로 실제 운영환경에 적용되는 애플리케이션은 정식 버전으로 출시된 스프링 부트의 버전보다 낮은 경우가 많다. 그렇기 때문에 "RestTemplate" 을 많이 사용하고 있다. 하지만 최신 버전에서는 "RestTemplate" 이 지원 중단되어 WebClient를 사용할 것을 권고하고 있다. Spring WebFlux HTTP 요청을 수행하는 클라이언트로 WebClient를 제공한다. WebClient는 리액터(Reactor) 기반으로 동작하는 API 입니다. 리액터 기반으로 스레드와 동시성 문제를 벗어나 비동기 형식으로 .. Book/스프링부트 핵심가이드 2023. 12. 2. 스프링부트를 이용한 서버 간의 통신(of. RestTemplate) 서버 간의 통신 다른 서버가 API를 호출해서 사용할 수 있게 구성되어 웹 요청을 보내고 응답 받을 수 있게 도와주는 "RestTemplate"에 대해 알아보겠습니다. RestTemplate 스프링에서 HTTP 통신 기능을 손쉽게 사용하도록 설계된 템플릿이다. HTTP 서버와의 통신을 단순화한 해당 템플릿을 사용하면 RESTful 원칙을 따르는 서비스를 편리하게 만들 수 있다. 기본적으로 동기 방식으로 처리되며, 비동식 방식으로 사용하고 싶은 경우 AsyncRestTemplate을 사용하면 된다. 다만 현업에서는 많이 쓰이나 지원 중단된 상태라서 WebClient 방식도 함께 알아둘 것을 권장한다. RestTemplate의 특징 HTTP 프로토콜의 메서드에 맞는 여러 메서드를 제공한다 RESTful 형식.. Book/스프링부트 핵심가이드 2023. 12. 1. 스프링부트 액추에이터 기능 엑추에이터의 기능에는 무엇이 있을까요? '액추에이터' 설정으로 볼 수 있는 기능에 대해 알아보겠습니다. 애플리케이션 기본 정보(/info) 액추에이터의 /info 엔드포인트를 활요하면 가동중인 애플리케이션의 정보를 확인할 수 있다. 제공하는 정보의 범위는 application.properties 파일에 'info.' 로 시작하는 속성값들을 정의하는 것이 가장 쉽다. 액추에이터 /info 설정 [application.properties] info.organization.name=test info.contact.email=test@gmail.com info.contact.phoneNumber=010-1234-5678 액추에이터 /info 출력 결과 { "organization": { "name":"test".. Book/스프링부트 핵심가이드 2023. 11. 30. 스프링부트 액추에이터의 기본 개념 엑추에이터란? 애플리케이션 운영 단계가 되면 정상적으로 동작하는지 모니터링하는 환경을 구축하는 것이 중요한데 해당 기능을 하는 '액추에이터' 에 대해 알아보겠습니다. 스프링부트 액추에이터 HTTP 엔드포인트나 JMX를 활용하여 애플리케이션을 모니터링하고 관리할 수 있는 기능을 제공한다. JMX(Java Management Extensions) 실행 중인 애플리케이션의 상태를 모니터링하고 설정을 변경할 수 있게 해주는 API JMX를 통해 리소스 관리를 하려면 MBeans(Managed Beans)를 생성해야한다. 엔드포인트 액추에이터의 엔드포인트는 애플리케이션의 모니터링을 사용하는 경로이다. 스프링부트에는 여러 내장 엔드포인트가 포함되어 있고, 커스텀 엔드포인트도 추가할 수 있다. 액추에이터를 추가하면 .. Book/스프링부트 핵심가이드 2023. 11. 28. 스프링부트에서 커스텀 예외 설정하기 커스텀 예외 스프링부트에서 표준 예외가 아닌 사용자가 직접 구현하는 커스텀 예외 처리하는 방법에 대해 알아보겠습니다. 커스텀 예외란? 커스텀 예외를 만들어서 사용하면 네이빙에 개발자의 의도를 담을 수 있기에 이름만으로도 어느정도 예외 상황을 짐작할 수 있다. 커스텀 예외를 사용하면 애플리케이션에 발생하는 예외를 개발자가 직접 관리하기 수월해진다. 커스텀 예외는 개발자가 직접 코드로 관리하기 때문에 책임 소재를 애플리케이션 내부로 가져올 수 있게 된다. 이를 통해 예외 상황이 발생한 경우 한 곳에서 처리하며 특정 상황에 맞는 예외 코드를 적용할 수 있게 된다. 표준 예외를 사용하면 의도하지 않은 예외 상황도 정해진 예외 처리 코드에서 처리하기 때문에 어디에서 문제가 발생했는지 확인하기 어렵지만 커스텀 예외.. Book/스프링부트 핵심가이드 2023. 11. 25. 스프링부트 예외 처리 예외처리 자바에서는 예외 처리를 try/catch/throw 구문을 활용하여 처리하는데, 스프링부트에서 적용할 수 있는 예외 처리 방식에 대해 알아보겠습니다. 예외 & 에러 예외(exception) 프로그래밍에서 예외(exception)란 입력 값의 처리가 불가능하거나 참조된 값이 잘못된 경우 등 애플리케이션이 정상적으로 동작하지 못하는 상황을 의미한다. 예외는 개발자가 직접 처리할 수 있는 것이므로 미리 코드 설계를 통해 처리할 수 있다. 에러(error) 주로 자바 가상머신에서 발생시키는 것으로서 예외와 달리 애플리케이션 코드에서 처리할 수 있는 것이 거의 없다. 대표적으로 메모리 부족(OutOfMemory), 스택 오버플로(stackOverFlow) 등이 있다. 발생 시점에서 처리하는 것이 아닌, .. Book/스프링부트 핵심가이드 2023. 11. 24. 이전 1 2 3 4 다음