Spring

· Spring
API 명세서 API 명세서 | Notion기본 예외 응답 구조teamsparta.notion.site세부 내용은 위 노션페이지에서 확인바랍니다.  테이블 명세서 테이블 명세서 | Notion1. 사용자 테이블 (p_users)teamsparta.notion.site세부 내용은 위 노션페이지에서 확인바랍니다.    모든 테이블 공용 컬럼created_atTIMSTAMP생성 시각created_byvarchar(255)생성 유저 식별자updated_atTIMSTAMP수정 시각updated_byvarchar(255)수정 유저 식별자deleted_atTIMSTAMP삭제 시각deleted_byvarchar(255)삭제 유저 식별자 사용자 테이블 (p_users)user_idvarchar(255)사용자 ID, PK..
· Spring
Spring 기반 애플리케이션에서 예외를 핸들링하는 전략들에 대해 알아보고자 한다. Servlet 기반 예외 처리 서블릿 기반 예외 처리는 발생한 예외를 WAS(Tomcat) 까지 전달한다. 그 이후 매핑된 예외 종류에 따라 Dispatcher Servlet에 다시 요청하며 예외를 핸들링한다. (forward와 비슷한 개념) @Component public class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factory) { List errorPages = List.of( new ErrorPage(HttpStatus.NOT_FOU..
· Spring
Spring Interceptor와 Servlet Filter 모두 공통 관심사항을 처리할 수 있는 유용한 기능이다. 예를 들어 로그인이 꼭 필요한 서비스에서 로그인 여부를 체크하는 작업이 필요하다고 할 때, 각 컨트롤러에서 보일러 플레이트 코드를 반복해서 작성해야 한다는 불편한 점이 존재한다. 이러한 횡단 관심사(cross-cutting concern)는 스프링에서 지원하는 AOP를 사용하여 해결할 수도 있지만 웹과 관련된 공통 관심사는 HTTP header 정보, URL 정보등이 필요한 경우가 많기에 이를 지원하는 서블릿 필터 혹은 스프링 인터셉터를 사용하는 것이 좋다. 서블릿 필터와 스프링 인터셉터는 HttpServletRequest를 포함한 여러 부가 기능을 지원하기에 특정 URL을 블랙 리스트 ..
· Spring
SLF4J 개발을 진행하며 로그를 기록하고 trace하기 위해 로그 라이브러리를 사용한다. 스프링에서는 기본 로그 라이브러리로 Logback을 지원하고 이를 SLF4J 인터페이스를 통해 사용할 수 있다. SLF4J를 사용하기 위해서는 아래와 같은 로거 선언 방식 중 하나를 선택하여 사용하면 된다. @Slf4j // 클래스 레벨에 해당 어노테이션 선언, 롬복 사용시 가능 public class TempClass { } private Logger log = LoggerFactory.getLogger(getClass()); private static final Logger log = LoggerFactory.getLogger(Xxx.class); 시스템 콘솔 출력 함수로 로그를 남기면 안되는 이유 Java에서..
☁️ EJB → Spring → Spring Boot 스프링이란 기존의 EJB(J2EE)에 의존적인 개발 방식의 불편한 점을 개선한 프레임워크이다. EJB에 의존적인 개발은 객체지향적인 설계가 힘들고 서버 구축 비용이 비싼데 성능조차 좋지 않은 단점이 있었다. 이러한 단점을 보완하여 스프링 IoC 컨테이너, DI(의존성 주입), AOP등 객체지향의 장점을 살린 기능을 가지는 프레임워크가 스프링 프레임워크이다. 하지만 스프링으로 만들어진 프로젝트도 불편한 점이 여전히 존재했다. 별도의 WAS 서버를 설치하고 배포해야 하는 작업, XML의 사용, 외부 라이브러리들과의 버전 호환성 등의 불편한 점을 개선하여 스프링 프레임워크를 더 쉽고 편리하게 사용할 수 있게 하는 프로젝트가 스프링 부트이다. 스프링 부트는 ..
제어의 역전(IoC) 사람은 이름을 가진다. 이름은 사람의 상태이다. 살아가면서 스스로 관리하며 사용한다. 하지만 이름은 태어나면서 부모님에 의해 결정된다. 나 스스로의 상태이며, 내가 사용하지만 이름의 제어권은 부모님에게 있다. 심지어 이름을 변경하는 것도 공공기관의 허가하에 이루어진다. 프로그래밍 상에서 살펴보자 자신을 소개하는 기능, 명함을 만드는 기능, 등등에서 자신이 사용하는 이름을 본인이 생성하여 제어하는 것이 아닌. 외부에서 생성자혹은 메서드를 통해 주입해준다. public class Person { private Name name; public Person(Name name) { this.name = name; } public setName(Name name) { this.name = na..
detail.html 댓글 DB에 저장되어있는 작성자 이름과 스프링 시큐리티 로그인 정보의 사용자 이름이 같다면 삭제 버튼이 보이도록 설정해준다. 삭제 Thymeleaf 환경에서 외부 자바스크립트 파일에 선언된 함수를 참조하는 방법을 찾지 못하여서 html파일에 인라인 자바스크립트 코드를 생성하여 동작하도록 생성하였다. board.js 에 선언되어 있어야 할 스크립트 코드가 html 파일 인라인으로 선언되어 있어 유지보수에 용이하지 못하기 때문에 추후 리팩터링이 필요하다. “/api/board/{boardId}/reply/{replyId}” 주소로 DELETE 요청을 보낸다. BoardApiController.java @DeleteMapping("/api/board/{boardId}/reply/{repl..
detail.html 댓글 등록 폼을 생성해줍니다. 등록 board.js btn-reply-save 버튼을 클릭 했을 때 동작할 코드를 작성해줍니다. reply-content id를 가진 태그의 값을 가져와 content에 저장하고 HttpBody에 Json형식으로 담아 /api/board/${boardId}/reply 주소로 POST 요청을 보냅니다. replySave: function () { let data = { content: $("#reply-content").val() } $.ajax({ type: "POST", url: `/api/board/${boardId}/reply`, data: JSON.stringify(data), contentType: "application/json; chars..
이미지 파일이 너무 많아서 노션 게시글로 대체합니다 Blog 프로젝트 - 카카오 로그인 기능 카카오 로그인 - OAuth2.0 hyunsb.notion.site
hyunsb
'Spring' 카테고리의 글 목록