개발이 좋아서/Spring이 좋아서

    API 예외 처리 - 스프링이 제공하는 ExceptionResolver

    import lombok.AllArgsConstructor;import lombok.Data;@Data@AllArgsConstructorpublic class ErrorResult { private String code; private String message;}import hello.exception.exception.UserException;import hello.exception.exhandler.ErrorResult;import lombok.extern.slf4j.Slf4j;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.we..

    로그인 처리하기 - 필터, 인터셉터

    - 공통 관심사를 해결하기 위해 스프링 AOP도 있지만 서블릿이 서블릿 필터와 스프링에서 제공하는 스프링 인터셉터를 사용하여 로그인 처리를 해보자- 둘 다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용 방법이 다르다.- 스프링 인터셉터는 서블릿 필터보다 편리하고 더 정교하고 다양한 기능을 지원한다. ServletFilterimport lombok.extern.slf4j.Slf4j;import javax.servlet.*;import javax.servlet.http.HttpServletRequest;import java.io.IOException;import java.util.UUID;@Slf4jpublic class LogFilter implements Filter { ..

    로그인 처리하기 - 쿠키, 세션

    영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지 V1 - 쿠키V2 - 직접 만든 세션V3 - HTTP 세션import hello.login.domain.login.LoginService;import hello.login.domain.member.Member;import hello.login.web.SessionConst;import hello.login.web.session.SessionManager;import lombok.RequiredArgsConstructor;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Controller;import org.spri..

    Spring boot - 액츄에이터

    build.gradle에 추가한다.implementation 'org.springframework.boot:spring-boot-starter-actuator'  management: endpoints: web: exposure: include: "*" endpoint: shutdown: enabled: true- endpoints.web.exposure.include = "*" : 모든 엔드포인트를 웹에 노출 엔드포인트 목록beans : 스프링 컨테이너에 등록된 스프링 빈을 보여준다.conditions : condition 을 통해서 빈을 등록할 때 평가 조건과 일치하거나 일치하지 않는 이유를 표 시한다.configprops : @ConfigurationPr..

    Spring boot - 프로필(@Profile)

    public interface PayClient { void pay(int money);}@Slf4jpublic class LocalPayClient implements PayClient { @Override public void pay(int money) { log.info("로컬 결제 money={}", money); }}@Slf4jpublic class ProdPayClient implements PayClient { @Override public void pay(int money) { log.info("운영 결제 money={}", money); }}@Service@RequiredArgsConstructorpublic class Ord..

    Spring boot - 외부설정(yml)

    my: datasource: url: local.db.com username: local_user password: local_pw etc: max-connection: 1 timeout: 60s options: LOCAL, CACHE---spring: config: activate: on-profile: devmy: datasource: url: dev.db.com username: dev password: dev etc: max-connection: 1 timeout: 60s options: DEV, CACHE---spring: config: activate: on-pr..

    Spring boot - 외부 설정(Environment, @Value, @ConfigurationProperties)

    Spring boot - 외부 설정(Environment, @Value, @ConfigurationProperties)

    @Slf4j@Componentpublic class EnvironmentCheck { private final Environment env; public EnvironmentCheck(Environment env) { this.env = env; } @PostConstruct public void init() { String url = env.getProperty("url"); String username = env.getProperty("username"); String password = env.getProperty("password"); log.info("url url={}", url); log.i..

    Springboot - 자동 구성(Auto Configuration), @Conditional

    Springboot - 자동 구성(Auto Configuration), @Conditional

    @Datapublic class Member { private String memberId; private String name; public Member() { } public Member(String memberId, String name) { this.memberId = memberId; this.name = name; }}@Repositorypublic class MemberRepository { private final JdbcTemplate template; public MemberRepository(JdbcTemplate template) { this.template = template; } publi..

    Springboot - 핵심 기능 5가지

    WAS: Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨라이브러리 관리손쉬운 빌드 구성을 위한 스타터 종속성 제공스프링과 외부 라이브러리의 버전을 자동으로 관리자동 구성: 프로젝트 시작에 필요한 스프링과 외부 라이브러리의 빈을 자동 등록외부 설정: 환경에 따라 달라져야 하는 외부 설정 공통화프로덕션 준비: 모니터링을 위한 메트릭, 상태 확인 기능 제공

    AOP - 실무 주의사항(프록시와 내부 호출)

    @Slf4j@Componentpublic class CallServiceV0 { public void external() { log.info("call external"); internal(); //내부 메서드 호출(this.internal()) } public void internal() { log.info("call internal"); }}@Slf4j@Import(CallLogAspect.class)@SpringBootTestclass CallServiceV0Test { @Autowired CallServiceV0 callServiceV0; @Test void external() { callServiceV0..