목록spring (11)
컴공생의 다이어리
@Profile 빈이나 컴포넌트에 프로필을 구분하여 빈을 로드하고 싶은 경우 @Profile을 활용하면 된다. 아래와 같이 @Profile을 통해 프로필(profile)이 active될 때 어떤 빈 혹은 컴포넌트를 등록할지 결정할 수 있다. @Configuration @Profile("prod") public class ProdConfig{ @Bean public DataSource dataSource(){ // ... 생략 } } @Configuration @Profile("dev") public class DevConfig{ @Bean public DataSource dataSource(){ // ... 생략 } } 프로필 이름 앞에 NOT 연산자인 !를 접두사로 붙여 프로필에서 제외시킬 수 있다. ..
[Spring Boot] 슬랙(Slack) webhook으로 메세지 보내기 오늘은 Spring Boot 프로젝트에서 슬랙에 메시지를 보내는 방법에 대해 정리하고자 한다. 본격적으로 들어가기 전 아래의 조건이 준비되어 있다는 가정을 하고 설명을 하려고 한다. 슬랙이 설치되어 있고 하나의 워크스페이스에 들어가 있다. 스프링부트 프로젝트의 기본 설정이 되어 있다. 슬랙 설정 1. 슬랙 앱에서 webhook을 검색한 후 Incoming WebHooks를 추가한다. 2. 추가 버튼 클릭 후 어떤 채널에 포스트할지 선택을 한 후 수신 웹후크 통합 앱 추가 버튼을 클릭한다. 3. 2번에서 버튼 클릭 후 아래와 같은 페이지가 나오는데 설정 지침의 웹후크 URL을 꼭 어디에 복사해둬야 한다. 해당 URL이 메시지를 보내..
Spring @RequiredArgsConstructor 어노테이션 의존성을 주입해주기 위해서 생성자(Constructor), Setter, Field 타입의 방식을 사용해야 했다. 하지만 lombok(롬복)의 @RequiredArgsConstructor 어노테이션을 사용하면 간단한 방법으로 생성자 주입을 해줄 수 있다. @RequiredArgsConstructor는 final 혹은 @NotNull이 붙은 필드의 생성자를 자동으로 만들어준다. 이를 통해 새로운 필드를 추가할 때 다시 생성자를 만들거나 하는 등의 번거로움을 없앨 수 있다. 하지만 자동적으로 생성자가 만들어지기 때문에 내가 예상하지 못한 결과나 오류가 발생할 수 있기 때문에 그런 점도 염두해둬야 한다. 아래는 생성자 주입 방법의 차이를 보여..
IntelliJ Execution failed for task ':compileJava'. 인텔리제이에서 프로젝트를 실행하다가 간혹 아래와 같이 Execution failed for task ':compileJava'. 에러가 발생하는 경우가 있을 것이다. 이 에러가 발생하는 이유는 프로젝트와 나의 JDK버전이 맞지 않아서 발생하거나 자바 경로 설정 문제 때문에 발생한다. 나의 경우 프로젝트와 JDK버전이 맞지 않아서 문제가 발생했다. build.gradle에는 JDK 버전이 16을 써야 한다고 설정해두었는데 IntelliJ에 설정된 자바 버전이 11이었다. 나의 경우 JDK 버전을 16말고 11로 변경해도 프로젝트에 영향이 없었기 때문에 16을 설치하지 않고 그냥 sourceCompatibility를 ..
spring security 적용 후 Refused to display in a frame because it set 'X-Frame-Options' to 'DENY' 발생 spring 프로젝트에 naver smarteditor2를 적용하려고 하니 Refused to display "http://localhost:8080/~" in a frame because it set 'X-Frame-Options' to 'DENY'라는 오류가 발생해 제대로 적용되지 않았다. 이유를 찾아보니 spring security를 적용하면 기본적으로 X-Frame-Options Click jacking 공격 막기 설정이 되어있기 때문이었다. X-Frame-Options 종류로는 아래 3가지가 있는데 이번 오류는 SAMEORI..
Spring JDBC queryForObject의 결과가 없을 때(null) 혹은 2개 이상일 때 스프링 프로젝트에서 JDBC Template의 queryForObject 함수는 오직 하나의 행을 반환한다. 만약 쿼리문의 실행 결과로 행이 없거나 두 개 이상의 행이 있으면 IncorrectResultSizeDataAccessException이 발생한다. 이때, 만일 queryForObject 실행 결과로 행이 없거나 두 개 이상의 행이 있을 때에 대해 예외처리를 해주고 싶다면 아래와 같이 try catch 문을 사용해주면 된다. try { JdbcTemplate jdbcTemplate; String sql = "select user_id from User where name = ?"; return jdb..
Spring jsp파일에서 JSTL 사용하기 Spring 프로젝트를 진행하면서 jsp파일에서 JSTL을 사용하려면 먼저 build.gradle이나 pom.xml파일에 JSTL을 추가해줘야 한다. 자신의 build 툴에 맞게 아래 중 하나를 build.gradle이나 pom.xml파일에 추가해주면 된다. 게시물 기준 제일 최신 버전이긴 한데 나온지 꽤 오래된 것이라 그냥 아래 중 하나를 써도 크게 문제 없을 것 같다. # build.gradle implementation 'javax.servlet.jsp.jstl:jstl:1.2' javax.servlet jstl 1.2 그리고 나서 jsp 파일 안에 아래와 같이 talib 지시자로 라이브러리를 선언을 해서 JSTL을 사용해주면 된다. 라이브러리 주요 기능..
Spring root-context.xml에서 db 정보 properties 파일로 분리 스프링 프로젝트에서 root-context.xml에 있는 db정보를 properties 파일로 분리하는 방법에 대해 정리하고자 한다. 우선 properties 파일을 하나 생성해주는데 나는 src/main/resources/config 폴더 밑에 database.properties라는 이름으로 파일을 생성했다. 그리고 파일 안에 db 관련 정보를 넣어줬다. db.url=jdbc:mariadb://127.0.0.1:3306/test db.username=root db.password=0000 그리고 나서 root-context.xml 파일의 시작 태그 뒤에 바로 아래 코드를 삽입해주었다. 만일 위치나 파일 명이 다르면..
Spring jsp에서 ajax로 PATCH, PUT, DELETE 요청시 파라미터 NULL 문제 Spring MVC 프로젝트에서 jsp 파일 안에 ajax로 PATCH 요청시 제대로 작업이 수행되지 않아 데이터를 출력해 보니 NULL값이었다. 이를 해결하기 위해서는 톰캣 서버의 server.xml 파일에서 Connector 태그에 parseBodyMethods="POST,PUT,DELETE,PATCH"를 추가해주면 된다. server.xml에 Connector 태그가 몇개 있을 텐데 아래 같이 port와 protocol 등 같은 정보를 넣은 Connector 태그에 추가해주면 된다. https://cchoimin.tistory.com/entry/Spring-REST-API-%EA%B0%9C%EB%B0%..
Eclipse The superclass "jakarta.servlet.http.HttpServlet" was not found on the Java Build Path 에러 이클립스에서 The superclass "jakarta.servlet.http.HttpServlet" was not found on the Java Build Path 에러가 발생하는 경우가 있다. 이 경우 프로젝트를 클릭하고 우클릭한 후 Properties를 선택한다. Properties에서 Java Build Path로 들어온 후 Libraries 탭에서 Add Library를 선택하고 Server Runtime을 선택한 후 Next 버튼을 클릭한다. 그 다음 Server를 선택한 후 Finish 버튼을 눌러준다. 그 다음으로 ..