본문 바로가기

✨ Back-end/Spring-Boot93

[Spring] 스프링 부트에서 메시지 국제화, Gradle HTML 삽입 미리보기할 수 없는 소스 원래라면 메시지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource 인터페이스를 빈으로 등록해야한다. 하지만, 스프링 부트를 사용하면 스프링 부트가 MessageSource를 자동으로 스프링 빈으로 등록한다. 따라서 위 코드는 없어도 된다. application.properties application.properties에서 spring.messages.basename=messages 를 작성한다. 이는 기본 값이라 작성하지 않아도 위 코드가 자동으로 등록된다. messages.properties messages.properties는 locale이 지정되지 않았을때 기본으로 출력할 properties이고, messages_en.properties는 l.. 2023. 9. 18.
[Spring] 부트에서 AOP 의존성 추가하고 사용하기 @Aspect [Spring] AOP 개념과 용어 8가지 AOP란? 관점지향 프로그래밍으로, 문제를 바라보는 관점을 기준으로 프로그래밍 하는 방법론 what when where 횡단관심사(cross-cutting-concerns) 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 bright-landscape.tistory.com AOP에 대해 알아보고 싶다면 위 포스팅으로. build.gradle HTML 삽입 미리보기할 수 없는 소스 위 코드를 build.gradle에 추가시켜준다. application.properties에 가서 나는 로깅 레벨을 info로 찍을 것이기 때문에 위와 같이 코드를 짰다. LoggingAspect HTML 삽입 미리보기할 수 없는 소스 현재 위 코드에서는 @Before과 @A.. 2023. 9. 18.
[Spring] 스프링 부트 mySql mybatis 연동하기 (gradle) mySQL 위 데이터들을 콘솔에 뿌려볼 것이다. 1. build.gradle HTML 삽입 미리보기할 수 없는 소스 위 코드를 build.gradle에 있는 dependencies에 복붙해주자. (추가 한뒤 리프레쉬 해야함.) 2. application.properties HTML 삽입 미리보기할 수 없는 소스 위 코드를 application에 복붙해준다. 이때 url에 있는 bitdb는 왼쪽 사진에 있는 테이블 명을 나타내고, username과 password는 root 계정과 그 비밀번호를 나타냈다. 또한 mybatis 경로를 설정해주어야하는데, 노란색 표시와 같이 경로를 잘 지정해주자. member-mapper.xml MemberVO mapper와 대입될 데이터들을 만들어준다. service Con.. 2023. 9. 15.
[Spring] 스프링 프레임워크(POJO, PSA, IoC/DI, AOP) 개념 Spring Framework POJO란? Plain Old Java Object의 약자로 다른 클래스나 인터페이스를 상속받아 메서드가 추가된 클래스가 아닌 일반적으로 우리가 알고 있는 getter, setter와 같이 기본적인 기능만 가진 자바 객체이다 ex) CODE HTML 삽입 미리보기할 수 없는 소스 테스트하기 용이하며, 객체지향 설계를 자유롭게 적용가능 특정 환경이나 기술에 종속적이지 않은 객체지향 원리에 충실한 자바 객체 일반적인 자바 객체를 지칭하기 위한 별칭 PSA란? Portable Service Abstraction의 약자로 다양한 서비스 제공 업체의 기술과 구현을 추상화하고 표준화된 방식으로 사용할 수 있는 인터페이스를 제공한다. ex) CODE HTML 삽입 미리보기할 수 없는 소.. 2023. 8. 22.
[Spring] Bean과 Bean Factory , @Configuration과 @Bean Bean이란? 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트임과 동시에 스프링 컨테이너가 생성과 관계설정, 사용 등을 제어해주는 제어의 역전이 적용된 오브젝트 스프링을 사용하는 애플리케이션에서 만들어지는 모든 오브젝트가 다 빈은 아니다. 그 중에서 스프링이 직접 그 생성과 제어를 담당하는 오브젝트만 빈이라고 부른다. Bean Factory 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트 보통 빈 팩토리(Bean Factory)를 바로 사용하지 않고, 이를 확장한 애플리케이션 컨텍스트(ApplicationContext)를 사용. BeanFactory라고 붙여쓰면 빈 팩토리가 구현하고 있는 가장 기본적인 인터페이스 이름이 된다. 이 인터페이스에 getBean()과 같은 메소드가 정.. 2023. 8. 19.
[Spring] 웹소켓 STOMP WebSocket - 실시간 채팅 구현하기 1. gradle을 사용하면 bulid.gradle에 먼저 implementation 해줘야하는게 있다. 반드시 추가 한 후, 다시 Refresh gradle Project를 시켜주자. implementation 'org.springframework:spring-web' implementation("org.springframework.boot:spring-boot-starter-websocket") 2. 먼저 HTML을 만들어준다. 나는 index.html을 만들어 아래 코드를 이렇게 넣어주었다. HTML 삽입 미리보기할 수 없는 소스 3. HTML과 연동시킬 javascript를 만들어준다. 아래 코드를 app.js를 만들고 붙여넣어 주었다. HTML 삽입 미리보기할 수 없는 소스 4. 이번 기능의 핵.. 2023. 6. 1.
[Spring] 쇼핑몰 - 62 이메일 전송하기 build.gradle bulid.gradle에 아래 코드를 추가해주었다. implementation 'org.springframework.boot:spring-boot-starter-mail' 이후 Refresh Gradle Prejct를 하자. application.properties spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username= spring.mail.password= spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.auth=true spring.mail.username= 에는 발신자 메일을 넣어준다. goo.. 2023. 5. 4.
[Spring] 쇼핑몰 - 60 주문 상태 변경 버튼 클릭시 주문 상태 버튼을 이용해 배송 관리를 해보자. 체크박스가 하나 이상이니 WHERE절에 ORDER_NUM 조건으로 IN 쿼리를 짜준다. UPDATE ORDER_STATUS SET STATUS_CODE = #{statusCode} WHERE ORDER_NUM IN (?,?) 쿼리에는 먼저 이런식으로 나오게 되는데, IN에는 두개 이상의 매개변수가 들어와야하므로 Map으로 빈값을 채워야한다. order_manage.html 버튼을 누를 때마다 js을 이용해 주문 상태를 변경하기 위해 버튼에 onclick 을 넣어주었다. order_manage.js js에서 컨트롤러로 이동하면 쿼리가 실행될 수 있도록 Map데이터를 생성해서 던질것이다. AdminController 컨트롤러 일단 orderNum이 1, 2로 체.. 2023. 5. 2.
[Spring] 쇼핑몰 - 59 페이징처리 페이징 처리를 해보자 모든 오라클 db에서 사용가능한 정렬 -1 ROWNUM을 넣은 후 정렬이 되기 때문에, 조회된 행 번호를 보면 뒤죽박죽으로 정렬되어있다. 따라서 오른쪽과 같이 SELECT절에 한번 감싸주어 ROWNUM을 정렬하게 되면 이렇게 ROWNUM이 제대로 정렬되어 뜨는 것을 확인할 수 있다. ROWNUM 은 조회된 데이터에 행번호를 붙이기 때문에, ROWNUM > 11 에서 데이터를 전혀 불러올 수 없다. ROWNUM이 1보다 큰 데이터들을 조건으로 주면 데이터가 나올 수 없다. HTML 삽입 미리보기할 수 없는 소스 이렇게 SELECT문으로 한번 더 감싸주었다. 그리고 ROWNUM에 별칭 ROW_NUM을주어, SELECT절에서 ROWNUM말고, ROW_NUM을 정렬하고 WHERE 조건을 주.. 2023. 4. 28.
[Spring] 쇼핑몰 - 58 주문 목록 정렬하기 날짜순으로 정렬되면 날짜순에만 파란색으로, 상태순으로 정렬되면 상태순으로 정렬되고 파란색으로 변경해보자. admin_mapper.xml 날짜순으로 정렬하기 위해서는 UPDATE_DATE를 BUY_DATE로 변경해야한다. STATUS_INFO에 있는 1,2,3,4,5는 각 주문접수, 주문확인, 배송준비, 배송중, 배송완료 데이터를 갖고있으므로 상태순으로 정렬하려면 BUY_DATE를 STATUS_CODE로 들어오면 된다. 따라서 ${ } 을 채워주면 된다. 단, 서브메뉴에서 들어오거나, 페이지를 처음들어오면 데이터를 못 받으므로, VO에서 변수를 추가하고, 컨트롤러에서도 넣어줘야 한다. OrderListSearchVO AdminController 컨트롤러 이렇게까지 하면, ${orderBy} 에는 초기에 주.. 2023. 4. 28.
[Spring] 쇼핑몰 - 57 주문 관리 검색 기능 만들기 order_manage.html html에서 일단 그림을 그려주었다. align-middle -> 버튼 생성 시 글자들이 위로 올라가는데, 다시 가운데 정렬해준다. admin_mapper.xml 각 input에 맞는 데이터들을 집어넣어 조건에 맞는 데이터들만 조회하기 위해 쿼리를 수정해주었다. 검색 기능을 구현하기위해 데이터를 이렇게 조회해보았는데, BUY_CODE와 BUY_DATE, STATUS_CODE에 임의의 값을 넣어 조회되는지 확인해보고, 오른쪽과 같이 java에 있는 데이터로 바꿔넣었다. OrderListSearchVO 컬럼이 변수로 들어오면 # 말고 $쓴다. 왜냐하면 #은 데이터 준 뒤 ' ' 를 줌으로써 문자로 인식한다. AdminController 컨트롤러 DB쿼리를 mapper에 이렇게.. 2023. 4. 27.
[Spring] 쇼핑몰 - 56 주문 확인 내역 Map 데이터 받아와 조회 ConstVariable AdminController 컨트롤러 컨트롤러 맨 아래에 기능을 위한 Map 메소드를 하나 생성해주었다. statusInfoList에 code와 name 각각 5개의 정보를 모두 불러와야한다. order_manage.html [[orderStatus.key]] 얘는 자료형이 int이다.orderStatusVO 안에 있는 데이터의 key 값이 Inteager이기 때문이다. orderStatusMap.put(statusInfo.getStatusCode() , adminService.getOrderStatusBy(statusInfo.getStatusCode()));에서 getStatusCode() 얘는 put으로 인해 key값으로 들어가는데 VO를 살펴보면 int 이기 때문이다. or.. 2023. 4. 27.