boot
![[MVC] 5. Controller, ViewResolver(Thymeleaf) 구현](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvU1Tr%2FbtrBYEAhJ6F%2FxCD6u7nWaXdBrY6J6jZlH0%2Fimg.png)
[MVC] 5. Controller, ViewResolver(Thymeleaf) 구현
Controller를 구현해 보겠습니다 Controller는 사용자의 요청(request)가 진입하는 지점(endpoint)라고 생각하시면 됩니다 어떤 요청이 왔는지에 따라 어떻게 처리할지를 결정하고 사용자에게는 처리된 결과를 응답하는 역할입니다 컨틀롤러가 없어도 웹페이지를 열 수는 있습니다 다음과 같이 main아래의 resources에 static이라는 이름으로 디렉토리를 만들어 보겠습니다 만들어진 static 디렉토리에다가 home.html 파일을 만들겠습니다 만들어진 home.html에 다음과 같이 작성합니다 Home 그리고 IntelliJ 오른쪽 상단에서 초록색 재생 버튼을 찾아서 눌러주세요 앞서 보았던 스프링 실행화면이 나옵니다 실행이 되면 웹 브라우저에서 다음과 같이 url을 입력해주세요 ht..
![[MVC] 4. 패키지 생성 및 git 브랜치 생성 및 커밋](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxR0bh%2FbtrBOvYJ8fQ%2FdAGVjhjvuBGjbQ7dSNVzRK%2Fimg.png)
[MVC] 4. 패키지 생성 및 git 브랜치 생성 및 커밋
IntelliJ에서 다음과 같은 화면을 찾아주세요 main이라고 적힌 부분을 클릭합니다 (main 앞의 하늘색 가지 모양은 git branch를 나타내며 바로 뒤는 현재 checkout 된 브랜치 이름을 나타냅니다) 클릭한 후 New Branch를 선택합니다 (새로운 브랜치를 생성하겠다는 의미입니다) 브랜치 이름은 주로 Jira 티켓이나 Git Issue 번호, Git flow의 feature 등을 사용합니다 예제에서는 브랜치 이름은 dev-001로 생성해 보겠습니다 입력을 다 한 후 파란색 버튼의 Create를 눌러줍니다 다음과 같이 파란색의 브랜치 문양 뒤의 문구가 main에서 dev-001로 바뀐 것을 알 수 있습니다 앞으로 작업은 깃허브에 올려진 main 브랜치가 아닌 dev-001의 브랜치에 우..
![[MVC] 3. Boot-Admin 프로젝트 Git 연동 (원격)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvHz2z%2FbtrAV211Li5%2FOLosdPibaG0knL3KRtLck0%2Fimg.png)
[MVC] 3. Boot-Admin 프로젝트 Git 연동 (원격)
앞서 만들었던 Git 로컬 저장소를 Git 서비스를 제공하는 Github(깃허브)의 원격 저장소와 연동하도록 하겠습니다 https://www.github.com GitHub: Where the world builds software GitHub is where over 73 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and feat... github.com 계정이 없으신 분들은 계정을 생성해주세요 본인의 github 계정의 Repositories 를 들어갑..
![[MVC] 2. Boot-Admin 프로젝트 Git 연동 (로컬)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F02q5y%2FbtrATSyKosB%2FnQVqNMZymgFsE5Dqa071b1%2Fimg.png)
[MVC] 2. Boot-Admin 프로젝트 Git 연동 (로컬)
우선, Git을 사용하실 분들은 IntelliJ와 Gradle에서 불필요한 파일들을 git에 올리지 않기 위해서 .gitignore 파일을 생성합니다 루프 프로젝트 폴더에 해당하는 boot-admin을 클릭하고 오른쪽 클릭하신 다음에 New를 눌러서 File을 생성합니다 파일 이름은 .gitignore 로 생성합니다 .gitignore 파일에는 다음과 같이 작성합니다 ### Maven template target/ pom.xml.tag pom.xml.releaseBackup pom.xml.versionsBackup pom.xml.next release.properties dependency-reduced-pom.xml buildNumber.properties .mvn/timing.properties # ..
![[MVC] 1. Boot-Admin 프로젝트 세팅 (IntelliJ + Gradle)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqNSFu%2FbtrAQ5sM2AI%2FvxCHYqabV8tcKAJhjcJhkk%2Fimg.png)
[MVC] 1. Boot-Admin 프로젝트 세팅 (IntelliJ + Gradle)
Spring Boot 기반의 BootStrap + AdminLTE 를 사용하는 ADMIN 프로젝트를 만들어 볼 예정입니다 사용하는 IDE는 IntelliJ (2022.1)를 사용할 예정이고 Java 11 + SpringBoot 2.6 기반으로 프로젝트를 만들겠습니다 1. IntelliJ를 시작하면 다음과 같은 화면이 나옵니다 우측 상단에 있는 New Project를 눌러줍니다 2. 다음과 같은 화면이 나오면 왼쪽 리스트에서 New Project를 선택합니다 (Spring Initialzr를 사용해도 되지만 제가 알기로 Community 버전에는 해당 기능이 없는 것으로 알고 있어서 직접 만들겠습니다) 각 입력란에 알맞는 것을 넣어주시면 됩니다 1) Location은 프로젝트가 위치할 폴더로 가장 우선 설..
[Spring] IntelliJ에서 Application 종료 후 재시작시 사용하는 포트가 존재한다고 나올때
로컬에서 IDE로 개발할때 코드 수정하고 Application 재시작할 경우 어쩌다 포트가 이미 사용중이라고 에러가 나는 경우가 있다 일반적으로 아래와 같이 현재 실행중인 spring 프로세스를 찾아서 kill 하면 된다 ps -ax | grep spring kill -9 {PID} 만약 로컬에 spring 프로세스가 많이 실행되고 있는 경우 아래 방법처럼 찾아서 kill한다 # 해당 포트 확인 및 pid 확인 lsof -i :8080 # pid 확인 ps -ax | grep {PID} # 프로세스 죽이거나 포트 바꾼다 # 프로세스 kill kill -9 {PID} # application.yml 에서 포트 변경 server.port = ****
[Gradle] 외부 파일로 Dependency 버전 관리 하기
일반적으로 spring boot를 사용하는 경우 io.spring.dependency-management 플러그인으로 dependency 관리를 한다 일부 몇몇 외부 라이브러리 사용하는 경우 다음과 같이 build.gradle 내에서 buildscript에 선언하여 version을 명시할 수 있다 // build.gralde buildscript { ext { resilience4jVersion = '1.7.1' } } 그러나 가끔 멀티 모듈을 사용할 경우 중복되는 라이브러리들의 버전은 별도로 관리하고 싶은 경우가 있다 방법 1. 별도 gradle 파일 이용 // versions.gradle 파일을 생성하고 다음과 같이 작성한다 ext.versions = [:] versions.spring_boot = ..
[JDBC] JPA(Read) + jdbcTemplate(Write) 사용하기
JPA를 사용할 경우 Entity의 Id 생성 전략이 IDENTITY일 경우 INSERT 구문이 실행될 때마다 SELECT 구문이 실행된다. 1개 row 작업의 경우 JPA를 사용함에 있어 큰 이슈가 없지만 대량의 배치성 작업의 경우 성능에 영향을 미친다. 이를 위해서 jdbcTemplate을 이용하여 jdbc의 prepareStatement와 rewriteBathchedStatements 옵션을 사용하여 성능 개선을 이룰수 있다. 그러나 다른 테이블의 데이터를 읽어서 새로운 테이블로 데이터를 migration 하는 경우 대량의 데이터를 한번에 읽을 수 없으므로 일반적으로 페이징 기법을 사용한다. 그러나 jdbc에서 페이지네이션(pagination) 쿼리를 만들기 귀찮아 jpa에서 PageRequest를..
[Bean] Router 구현
가끔 특정 비지니스 로직에서 주어진 입력에 따라 Bean을 선택적으로 사용하고 싶은 경우가 있다 Interface를 사용하여 해당 인터페이스를 구현한 Bean들을 컬렉션(List or Map)에 넣어 사용할 수 있다 1. Interface public interface SampleInterface { // 임시로 String으로 구현하였으나 Enum으로도 구현 가능하다 boolean isTarget(String targetName); } 2. Implements import org.springframework.stereotype.Component; @Component public class SampleComponent implements SampleInterface { private static fina..
[Enum] AttributeConverter 구현
1. Enum Interface import com.fasterxml.jackson.annotation.JsonValue; public interface SampleEnum { @JsonValue String getCode(); } 다음과 같은 SampleEnum 이라는 인터페이스를 작성한다 2. Enum Class import java.util.Arrays; import java.util.NoSuchElementException; import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor public enum SampleType implements SampleEnum { SAMPLE_ONE("..