본문 바로가기

Spring38

[Spring] IDE에서 잘 접근되던 페이지가 서버에서는 접속되지 않을 때 IDE에서 잘 접근되던 페이지가 서버에서는 접속되지 않을 때 간간히 활동하고 있던 Holix라는 커뮤니티에서 나온 질문 spring boot로 만든 게시판 프로젝트를 ncloud에 올려서 빌드를 했더니 400 에러 뜨면서 MethodArgumentTypemismatchException이 발생하네요 로컬에선 잘 되는데 클라우드에 올리면 에러가 생깁니다 왜 이런가요 ?? 문제 질문자의 상황은 인텔리제이에서는 template 디렉토리 아래의 html이 잘 접근되는데 클라우드 서버에서 실행하면 에러가 발생하는 현상이였다. 문제가 발생한 이유 질문자의 현재 상황 @GetMaping("~~~") public String ... { ... return "/aaa/bbb" } 위 코드를 보고 첫번째로 든 생각은 왜 r.. 2022. 4. 30.
[JPA]영속성 전이 CASCADE 영속성 전이 CASCADE JPA를 사용하면서 CASCADE 옵션은 repository의 save, delete 메서드를 한번이라도 덜 쓰게 해주기에 최대한 활용할 수 있게 노력하는 편이다. 매번 책으로 확인하기보다 한번 제대로 정리하려 한다. CASCADE란? 영속성 전이(CASCADE): 특정 엔티티를 영속상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때에 사용하는 기능 CascadeType으로 ALL, PERSIST, MERGE, REMOVE, REFRESH, DETACH가 존재한다. ALL: 모두 적용 PERSIST: 영속 MERGE: 병합 REMOVE: 삭제 REFRESH: REFRESH DETACH: DETACH 주로 @OneToXXX연관관계에 사용한다. @OneToXXX(Ca.. 2022. 4. 21.
SpringBoot Jenkins 배포 자동화 1 SpringBoot Jenkins 배포 자동화 1 Spring 프로젝트를 만들고, 배포를 하면서 기존 Build된 WAR 파일을 원격 서버에 전송하고, 원격 서버에서 직접 배포하는 과정이 불편하게 느껴졌다. 때문에 EC2환경에서 docker와 Jenkins를 사용하여 Github의 소스를 빌드하고, 배포하는 작업을 자동화 하려 한다. 환경 SpringBoot, jar, gradle AWS EC2 Jenkins Docker Github Jenkins 배포 과정 Jenkins를 이용한 배포 과정은 다음과 같다. SpringBoot 프로젝트 개발 Github에 push Jenkins에서 build build한 결과 jar파일을 web server에 SSH 송신 web server에서 jar파일 실행(배포) J.. 2022. 3. 23.
Java 요청 IP 확인 방법 Java 요청 IP 확인 방법HttpServletRequest객체에서 IP주소 받아오기요청한 클라이언트의 IP주소는 HttpServletRequst 객체를 통해 받아올 수 있다.protected String getClientIpAddr(HttpServletRequest req) { String ip = req.getHeader("X-Forwarded-For"); log.info(">>>> X-FORWARDED-FOR : " + ip); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = req.getHeader("Proxy-Client-IP"); log.info(">>>> Proxy-Client-IP : " + ip);.. 2021. 8. 29.
[Spring] 파일첨부 [Spring] 파일첨부 파일첨부 방식에는 페이지 이동방식(form태그 이용)과 Ajax 이용방식, iframe을 이용하는 방식이 있다. 이중 iframe을 이용하는 방식은 화면이 하나 더 뜬다는 점과, 보안에 취약해 대부분의 웹사이트에서 이용하지 않고 있는 방식이다. 파일 업로드 API cos.jar cos.jar을 이용하는 방식은 2002년 이후로 개발이 종료되었고, 더 이상 사용하지 않는 것을 권장한다. commos-fileupload commos-fileupload는 일반적으로 많이 활용되며, 서블릿 3.0 이전에도 사용 가능하다. 서블릿의 API상에서 지원 서블릿 버전 3.0 이상부터는 API상에서 파일 업로드를 지원한다. 서블릿 버전 변경 및 설정 pom.xml 버전변경 ... javax.se.. 2021. 5. 28.
[Spring] 트랜잭션 [Spring] 트랜잭션 service의 메소드가 하나의 mapper메소드(쿼리)만 사용한다면 예외 발생 후에 DB에는 변화가 없다. 하지만 하나의 트랜잭션이 여러 개의 mapper메소드(쿼리)를 순차적으로 실행 후 문제 발생 시 성공한 쿼리문만 반영되어 다시 직접 복구해야하는 문제가 발생한다. 이러한 문제를 막기 위해 스프링에서는 @Transactional 어노테이션을 사용하여 한개의 트랜잭션에 문제가 발생하였을 때 rollback을 통해 전체 트랜잭션이 모두 DB에 반영되지 못하도록 막아준다. @Transactional @Override public int remove(Long rno) { log.info("remove........."+rno); board_mapper.updateReplyCnt(m.. 2021. 5. 26.
[Spring] AOP [Spring] AOP AOP란 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍을 뜻한다. 관점, 관심사 관점이란 개발에 있어서, 관심사(concern)을 의미한다. 관심사는 개발 시 필요한 것들을 생각하는 일이다. 파라미터가 잘 전달되었는가? 이 로직에서 발생할 수 있는 모든 예외를 처리하자 적절한 권한을 가진 사용자가 작업하고 있는가? 핵심 로직은 아니지만 반복적으로 개발에 필요한 관심사들이다. AOP 따라서 AOP는 이러한 것들을 모듈로 분리하여 작성하고 핵심 비지니스 로직만을 작성하도록 한다. 종단 관심사 : 핵심로직 횡단 관심사 : 주변로직 횡단 관심사를 모듈로 구현하는 것이 AOP를 구현하는 것이다. 즉, 반복적으로 나타나는 횡단괌심사를 모듈로 분리한 수 적절한.. 2021. 5. 26.
[Spring] web.xml cvc-elt.1.a: Cannot find the declaration of element 'web-app' cvc-elt.1.a: Cannot find the declaration of element 'web-app' 오류 해결방법 스프링에서 servlet 버전을 3.1로 올린 후 web.xml에서 위와 같은 오류가 발생 xsi:schemaLocation의 버전부분만 3_1로 변경하면 되는줄 알았는데 xmlns과 xsi:schemaLocation 둘다 servlet 3.1버전에 맞게 수정해야 한다. 위와 같이 수정하여 해결 참고자료 https://www.ibm.com/docs/ko/was-liberty/base?topic=31-servlet-behavior-changes 2021. 5. 26.
log4j.xml The file cannot be validated as the XML definition 오류 log4j.xml The file cannot be validated as the XML definition 오류 log4j.xml을 열었을 때 엄청난 x표시와 함께 마음을 불편하게 할 때가 있다. spring을 실행하는데에는 문제가 없지만 에러문구를 없애려고 위 !DOCTYPE로 변경하여 해결 2021. 5. 24.