배운 것

- @Bean 어노테이션
  - Spring IoC 컨테이너가 관리하는 자바 객체
  -  ApplicationContext가 담고 있다.


- BeforeActionInterceptor.preHandle 메서드 내부에서 로그인 세션값 정보를 주는 것에 대해서
  - 공용 데이터로 사용할 로그인 세션값 정보는 preHandle 함수에서 주며, 현재 세션값이 등록되어있는지 검사한 뒤 값을 넣는다.
  - 세션값의 등록은 Controller.doLogin에서 실행된다.
  - preHandle 함수는 Controller 실행 이전에 실행된다.
  - 실행 순서에 있어서, 이상해보일 수 있는데, 로그인 또는 로그아웃 이후 항상 Controller를 통해 페이지 이동을 하게된다.
    - Controller가 호출될 때마다, interceptor가 호출되므로, 사실상 매번의 동작마다 preHandle 함수를 통해 현재 로그인 세션을 검사하는 것과 마찬가지이다.

 

- BeforeActionInterceptor는 Configuration 어노테이션이 적용된 MyWebMvcConfigurer에서 호출하고 있지만 @Component 어노테이션이 없으면 인식하지 못한다.

'Records' 카테고리의 다른 글

2021-08-05 [ WIKEN ]  (0) 2021.08.06
2021-08-03 [ 프로젝트 변경 ]  (0) 2021.08.06
2021-08-01 ( Spring Boot )  (0) 2021.08.01
2021-07-31 ( Spring Boot )  (0) 2021.08.01
2021-07-30 ( Spring Boot )  (0) 2021.08.01
배운 것

- Repository는 Mapper로 연결하며, interface로 구현한다.
- 타임리프를 사용하려면, html 파일에 xmlns:th="http://www.w3.org/1999/xhtml" 정보가 추가 돼야한다.
- <th:block></th:block>을 통해 텍스트(번수 값)만 넣는 방법
- 기존 header/footer를 각 view 파일에서 불러오는 방식이 아닌, layout.html 파일에 title/main 부분을 다르게 주는 방법
  - layout.html의 title 태그는 fragment 이름을 안 줘도 된다.
  - fragment name을 준 동일한 태그에 대해서 layout.html을 불러오는 view 파일은 해당 태그 및 모든 하위 태그들을 대체한다.


- tailwind CSS
  - min-h-screen = min-height: 100vh

'Records' 카테고리의 다른 글

2021-08-06 [ WIKEN ]  (0) 2021.08.06
2021-08-03 [ 프로젝트 변경 ]  (0) 2021.08.06
2021-08-01 ( Spring Boot )  (0) 2021.08.01
2021-07-31 ( Spring Boot )  (0) 2021.08.01
2021-07-30 ( Spring Boot )  (0) 2021.08.01

- PJ명 : WIKEN

- IDE: IntelliJ
- Lanuage: Kotlin
- JDK version: 16

- Pattern : MVC

 

초기 스프링부트 세팅 과정

- Spring Initializr에서 최초 프로젝트 생성

 

- IntelliJ 세팅
    - 스프링 리로드를 하려면 Keymap에서 reload from DISK 단축키를 지정해서 실행해주어야 스프링이 리로드 실행.

'Records' 카테고리의 다른 글

2021-08-06 [ WIKEN ]  (0) 2021.08.06
2021-08-05 [ WIKEN ]  (0) 2021.08.06
2021-08-01 ( Spring Boot )  (0) 2021.08.01
2021-07-31 ( Spring Boot )  (0) 2021.08.01
2021-07-30 ( Spring Boot )  (0) 2021.08.01
배운 것

- JAVA는 형식이 형식이 정해져있기 때문에(IoC) 협업이 필요한 대규모 회사에서 사용하기 좋고, PHP는 형식이 주어지지 않기 때문에 당장 빠르게 구현해서 결과를 내놓아야하는 스타트업에서 유리하다. 또, PHP는 개발자마다 코드의 퀄리티가 큰 차이가 난다.


- Controller의 메서드가 파라미터를 받을 때, defaultValue를 설정할 수 있다. (int 타입도 더블쿼터 안에 담는다.)


- articleDao.xml에서 resultType을 지정할 때, return 값이 ```List<Article>```이라도, resultType은 Article이여야한다.


- form 태그로부터 받은 입력값(get, post 둘 다), URL 파라미터 값은 전부 Controller의 각 메서드 매개인자로 받는다.


- getArticlesCount가 필요한 이유를 알았다.


- msgAndBack/Replace에서 HttpServletRequest를 받는 이유
  - msgAndBack/Replace 메서드는 msg와 historyBack/replaceUri을 attribute로 set하면서 redirect.jsp(페이지이지만 JS로만 구현되어있다.)로 이동시켜서 replaceUri 등으로 다시 이동시킨다.


- Controller의 메서드가 String을 return하면 URL로 인식해서 이동하는데, ResponseBody 어노테이션이 붙어있으면, URL로 이동하지 않고 URL을 페이지에 표시하게되니 주의할 것.

'Records' 카테고리의 다른 글

2021-08-05 [ WIKEN ]  (0) 2021.08.06
2021-08-03 [ 프로젝트 변경 ]  (0) 2021.08.06
2021-07-31 ( Spring Boot )  (0) 2021.08.01
2021-07-30 ( Spring Boot )  (0) 2021.08.01
2021-07-29 ( Spring Boot )  (0) 2021.08.01
배운 것

- 스프링 부트가 jsp 파일에 접근하는 방식
  1) yml 파일에 파일 경로 및 확장자(jsp) 설정.
  2) Controller가 String으로 경로를 return한다.
  3) 해당 경로에 해당 파일(jsp)이 존재하면 렌더링하고 없으면 에러 발생.
- View 파일의 form 검사를 placeholder에 맡기는 게 아닌, 직접 JS로 구현 해주는 방식
- Controller의 메서드가 HttpServletRequest를 인자로 받는 이유
  - Attribute를 사용하기 위해서
- 파라미터 검사 시, null인지 검사하는 Util.isEmpty()를 따로 만들어서 사용하는 이유
  - 파라미터를 DB에 넣고 돌릴 때, null인 값이면 프로그램 뻗음.
- Controller의 메서드가 파라미터를 받을 때, 파라미터가 정수형이면 Integer를 써서 null이 허용되도록 해야한다.
- head/foot.jspf 파일들이 연결된 방식

- 웹루트 및 접근 가능성에 대한 예외처리

'Records' 카테고리의 다른 글

2021-08-03 [ 프로젝트 변경 ]  (0) 2021.08.06
2021-08-01 ( Spring Boot )  (0) 2021.08.01
2021-07-30 ( Spring Boot )  (0) 2021.08.01
2021-07-29 ( Spring Boot )  (0) 2021.08.01
2021-07-27 ( Spring Boot )  (0) 2021.08.01
배운 것

- 마이바티스 연동
  - ArticleService > ArticleDao
    - ArticleDao는 인터페이스로 구현하며, ArticleDao.xml 파일과 매핑 되어 있다. 인터페이스 내에 구현된 각 메서드들은 xml 파일에 id를 통해 각각의 SQL구문과 매핑되며, id와 함께 resultType을 줘서 Article, int 등 반환 받을 데이터 타입을 지정할 수 있다. 

'Records' 카테고리의 다른 글

2021-08-01 ( Spring Boot )  (0) 2021.08.01
2021-07-31 ( Spring Boot )  (0) 2021.08.01
2021-07-29 ( Spring Boot )  (0) 2021.08.01
2021-07-27 ( Spring Boot )  (0) 2021.08.01
2021-07-26 ( Spring Boot )  (0) 2021.08.01
배운 것

- Controller를 통해 doWrite의 URL을 통해 들어오는 경우와 jsp 페이지 자체를 URL을 통해 들어오는 두 경우를 모두 고려한다면, Controller에서의 파라미터 체크와 jsp에서의 JavaScript를 통한 파라미터 체크 둘 다 필요하다.
- init 생성자 내부에서 호출되는 것들은 init 생성자가 호출될 때까지 보류된다. (순환 참조를 방지하는 방법)
- Spring Boot DevTools가 제공하는 기능
  - Propery defaults
  - Automatic restart
  - Live reload
  - Global settings
  - Remote applications

 

- preparedStatement에 대해서

'Records' 카테고리의 다른 글

2021-07-31 ( Spring Boot )  (0) 2021.08.01
2021-07-30 ( Spring Boot )  (0) 2021.08.01
2021-07-27 ( Spring Boot )  (0) 2021.08.01
2021-07-26 ( Spring Boot )  (0) 2021.08.01
2021-07-20 ( JSP )  (0) 2021.07.21
배운 것

- MyBatis 라이브러리를 이용해서 SQL문 실행
  - #{}와 ${}의 차이 : ${}는 파라미터를 변환없이 가져오고 #{}는 PreparedStatedment를 사용한다.
    - PreparedStatement는 값을 바인딩 하는 시점에서 전달된 값에 대한 특수문자, 쿼리등을 필터링하여 SQLinjection을 막는다.

'Records' 카테고리의 다른 글

2021-07-30 ( Spring Boot )  (0) 2021.08.01
2021-07-29 ( Spring Boot )  (0) 2021.08.01
2021-07-26 ( Spring Boot )  (0) 2021.08.01
2021-07-20 ( JSP )  (0) 2021.07.21
2021-07-19 ( JSP, JS )  (0) 2021.07.19

+ Recent posts