기록의 공유

잊지않기 위한 기록의 공유

Backend/Spring 10

서버사이드 렌더링 프로젝트 파일위치 주의점

maven으로 생성하면 main/webapp이 존재할것이고gradle로 생성하면 없다. 배포방식을 war로 설정했다면webapp을 만들고 사용한다.webapp안에 WEB-INF를 만들어 사용하면 WEB-INF안에는 클라이언트가 접근불가능하다. index.html은 자동으로 서버 웰컴페이지로 등록된다.일반적으로 webapp안에 들어가있는 파일들은 클라이언트가 접근가능하다.클라이언트가 접근하면 안되는 페이지들은 web-inf안에 넣는다. resources의 static은 정적파일을 담는다.static안의 index.html은 자동으로 웰컴페이지로 등록된다.static안에 담는 html파일은 클라이언트가 접근가능하다.접근하지말아야하는것은 templates에 담는다. html,css,javascript,..

Backend/Spring 2024.04.16

예외처리 유의점2

1. @Valid,@Validated를 사용할때 주의점@PostMappingpublic String addReview(@Validated @RequestBody AddReviewReq addReviewReq, BindingResult bindingResult) { reviewService.addReview(addReviewReq); return "success";}만약 다음과 같이 BindingResult를 매개변수로 받기로 했다면 스프링은 Bean Validation을 사용한 검증이 실패하더라도 BindingResult에 에러만 담아주고 메소드를 실행시켜준다.즉 메소드안에서 에러에 대한 후처리를 해야만한다. 그게 아니고 @ControllerAdvice에서 예외에 대한 핸들러로 처리하고싶다면B..

Backend/Spring 2023.02.07

DTO 정리

0. DTO (data transfer object) 란?데이터 전송 객체 DTO는 기능은 없고 데이터를 전달만 하는 용도로 사용되는 객체를 뜻한다.참고로 DTO에 기능이 있으면 안되는가? 그것은 아니다.객체의 주 목적이 데이터를 전송하는 것이라면 DTO라 할 수 있다. 객체 이름에 DTO를 꼭 붙여야 하는 것은 아니다. 대신 붙여두면 용도를 알 수 있다는 장점은 있다. 이전에 설명한 ItemSearchCond 도 DTO 역할을 하지만,이 프로젝트에서 Cond 는 검색 조건으로 사용한다는 규칙을 정했다. 따라서 DTO를 붙이지 않아도 된다. ItemSearchCondDto 이렇게 하면 너무 복잡해진다.그리고 Cond 라는 것만 봐도 용도를 알 수 있다. 참고로 이런 규칙은 정해진 것이 없기 때문에 해당 ..

Backend/Spring 2023.02.01

insert할때 자동으로 생성되는 키값 가져오기 [미완]

2가지 방법이 존재 1. useGeneratedKeys와 KeyProperty사용하기 insert into review (content) values (#{content})public class CreateReviewRequest { private long roomId; private long userId; private long reviewId; private long reservationId; private String content;review라는 테이블에 데이터를 생성하면 AUTOINCREMENT 덕분에 review테이블의 id라는 컬럼의 값이 알아서 증가되면서 들어간다.그때 방금 생성된 로우(레코드,튜플)의 id값을 가지고싶다면 useGeneratedKeys와 ..

Backend/Spring 2023.02.01

Spring] 예외처리 (@ExceptionHandler , @ControllerAdvice,@RestControllerAdvice), 에러코드,실제 적용

@ExceptionHandler@ExceptionHandler는 @Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다. @ExceptionHandler라는 어노테이션을 쓰고 인자로 캐치하고 싶은 예외클래스를 등록해주면 끝난다.모든 예외를 캐치하고싶다면 Exception.class로@ExceptionHandler(NullPointerException.class)public Object myExceptionHandler() { log.info("핸들러가 실행되었습니다."); System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); return..

Backend/Spring 2023.01.24

Spring Profile마다 Application.* 다르게 사용하기

현재 배포환경이 local인지개발서버인 dev인지프로덕션서버인 prod인지 등 서버의 배포환경에 따른 설정값들이 다를것이다 ( Spring Profile 마다 application.* 매핑하기 (파일이름으로 매핑)application.properties를 사용한다고 할때application-local.propertiesapplication-dev.propertiesapplication-prod.properties이런식으로 파일을 추가적으로 만든다고하면 Spring profile이 local일때는 application-local.properties를 가지고 서버 동작시키고Spring profile이 dev일때는 application-dev.properties를 가지고 서버 동작시키고Spring pro..

Backend/Spring 2023.01.20

Spring Boot]로그,로깅,로그를 파일로 저장하기 (LogBack)

[틀린 정보가 있을 수 있습니다.]로그와 로깅에 대한 정보 8)★★★스프링 MVC - 기본기능, 로깅(logging)초기설정 스프링부트 application 실행해서 동작 테스트 로깅(logging) 간단히 알아보기 스프링부트를 생성하면 자동으로 추가되는 스프링부트스타터 안에 스프링부트 스타터 로깅이라는 라이브러keeeeeepgoing.tistory.com LogBack(로그백) 정리 [위에 링크된 게시글에서 정리한 내용은 제외]LogBack은 SLF4J를 인터페이스로 사용한다 ( SLF4J의 편하게 구현체라고 생각하면 될듯하다) Appender,Encoder,LayoutLogBack은 로그를 찍는 일에 대해 Appender라는 Components에 위임한다.그러나 실제 로그의 formatting에 관..

Backend/Spring 2023.01.19

Spring - SMTP 네이버 이메일 인증 , redis로 인증번호 만료 구현

네이버 SMTP 설정설정을 저장해주면 아래 Pop 서버명같이 작은 정보창이 생김 의존성 설정//이메일인증implementation 'org.springframework.boot:spring-boot-starter-mail' 환경설정 -> MailConfig.java OR application.yml 사용@Configurationpublic class MailConfig { @Value("${spring.mail.password}") private String password; @Bean public JavaMailSender javaMailService() { JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); ..

Backend/Spring 2022.10.16

의존성주입(DI)

의존성? 의존성 주입을 이해하기전 의존성(=의존관계,Dependency)란? A가 B를 의존한다와 같이 의존대상 B가 변하면 그것이 A에 영향을 미치는 관계 , 그런 성질을 의미한다. 즉 하나의 클래스가 바뀔때 다른 클래스가 영향을 받는다는 것을 뜻한다. DI(Dependency Injection , 의존성 주입, 의존관계 주입) 의존성 중비이란 클래스간 의존성을 클래스 외부에서 주입하는것을 뜻한다. 더 자세하게는 의존성 주입은 클래스에 대한 의존성의 인터페이스화를 통한 코드 유연성 증대 + 클래스의 인스턴스를 외부에서 생성하여 주입하는것 을 뜻한다. 예) Computer 클래스가 CPUi5 클래스를 의존하고있었고 , 해당 cpui5 클래스 안에 메소드도 이용하고있었다. 하지만 어떠한 이유로 인해 com..

Backend/Spring 2022.10.03