버전및 세팅 Springboot 3.0.2 DB: embadded H2 자바: 17 plugins { id 'java' id 'org.springframework.boot' version '3.0.2' id 'io.spring.dependency-management' version '1.1.0' } UUID 적용 사유 아래 처럼 id를 Long 타입으로 주고 글이 하나 생길때마다 하나씩 늘어나는 방식으로 줬다면 글이 총 몇개있는지 파악할 수 있다. 전체 개수가 몇개인지 파악되는 것을 꺼려할수도 있기 때문에 id를 암호화 하거나 UUID로 변경해야 한다. @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", updatabl..
스프링 시큐리티(Spring Security)를 사용하는 이유는 웹 애플리케이션 사용시 사용자 아이디와 비밀번호를 인증을 할 수 있게 하여 URL마다 특정 권한이 있는 사용자만 접속이 가능하게 할수도 있게 하고 사용자 비밀번호를 편하게 암호화 할 수 있다. 스프링 시큐리티 연동 스프링 시큐리티 사용하려면 아래 스프링 시큐리티 dependency 추가(test는 의존성은 추가 안해도됨) org.springframework.boot spring-boot-starter-security org.springframework.security spring-security-test test 스프링 시큐리티 의존성을 추가하고 나면 모든 요청은 인증을 필요로 하고, 기본 유저가 생성된다. Username : user Pa..
DevTools는 코드가 변경될 때 자동으로 애플리케이션을 다시 시작시킨다. 즉, 소스를 변경할때 마다 프로젝트를 중지시키고 다시 시작 시킬 필요가 없다는 뜻이다. 인텔리제이(IntelliJ) 에서 사용방법 DevTools를 처음 스프링부트 프로젝트를 만들면서의존성을 지정할때 Spring Boot DevTools를 선택하면 아래처럼 pom.xml파일의 요소에 지정되어 있다. Preferences - Advanced Settings - Compiler에서 Allow auto-make to start even if developed application is currently running을 체크해준다. Perference에서 Compiler를 검색후 Compiler 설정창에서 Build project ..
테스트케이스 개발한 기능이 정상적으로 돌아가는지 테스트하려고 할때 main 메서드를 통해 웹을 접속하여 화면에서 직접 테스트 하는 경우가 일반적이였다. 이 방법은 준비하고 실행하는데 오래걸리고 무엇보다도 반복적으로 테스트 하기가 어렵다. 하지만 스프링부트에서는 코드로 테스트 할수가 있다. 이 코드를 테스트케이스라고 한다. 또 TDD방식이라고 해서 테스트코드를 먼저 작성하고 구현을 한다고 한다. 몇만 몇십만 소스코드를 짜야한다고 할때 테스트코드 없이 개발하면 정말 많은 문제가 일어난다고 한다. 에러사항을 구현 초반에 알아야 해결하기 쉽듯이 말이다. 예제 아래 예제는 id와 이름을 가지고 있는 Member 객체를 저장하는 save(), find() 가 정상적으로 실행되는지를 확인 하는 예제이다. public..
웹 개발 방식 3가지 웹을 개발하는것은 크게 3가지 방법이 있다. 첫번째로는 정적 컨텐츠가 있는데 이것은 정적 파일을 웹 브라우저에 그대로 내려주는 것이고, 두번째로는 MVC와 템플릿 엔진이 있는데 템플릿 엔진은 PHP, JSP 등 html을 서버에서 처리를 한 후 웹 브라우저에 내려주는 것이다. 그리고 API는 html을 내려주는 것이 아니라 json, xml 형식의 데이터 구조 포맷을 클라이언트 에게 내려주고 화면은 클라이언트 에서 그린다. 대표적으로 React, Vue 가 있다. 그리고 서버끼리 통신할때 데이터만 주고 받으면 되니 API 방식을 사용한다. 1. 정적 컨텐츠 https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/sp..
프로젝트를 서버에 배포하기 위해서는 빌드하여 jar파일을 생성해야 한다. 예전에는 서버에 WAS 세팅을 했어야 했는데 스프링부트 프로젝트는 jar파일을 서버에 올리고 실행만 해주면 된다. 방법은 간단한다 프로젝트 폴더로 이동해서 "./gradlew build" 명령어를 통해 build 를 하면 build 폴더가 생성된다. 그리고 "cd build/libs" 명령어로 libs 폴더로 이동 후 "java -jar 자르파일" 명령어로 실행을 해주면 된다. ctrl+c를 하면 실행취소가 되며, 만약에 빌드를 다시하고 싶을땐 "./gradlew clean build" 명령어로 clean 후 다시 빌드를 해주면 된다. 커맨드창에서 실행을 시키는것과 인텔리 제이나 이클립스에서 실행을 하는것이 같은 포트를 사용한다면 ..
라이브러리 Grdle, Maven 같은 빌드 툴들은 의존관계를 다 관리해준다. 즉 한 라이브러리를 땡겨올때 그 라이브러리안에 필요한 라이브러리들을 자동으로 다 땡겨온다는 것이다. 그래서 스프링부트와 관련된 라이브러리를 땡겨오면 spring-core까지 다 땡겨오기 때문에 스프링과 관련된 라이브러리가 자동으로 다 세팅이 된다. 그리고 spring-boot-starter-web 라이브러리를 땡겨올때 자동으로 톰캣 라이브러리를 가져오기 때문에 톰캣 설치없이 웹서버를 띄울수 있는것이다. 로그는 spring-boot-starter-logging 라이브러리의 logback, slf4j를 많이 사용하며 테스트 라이브러리는 spring-boot-starter-test 라이브러리의 junit(테스트 프레임워크), moc..
시작전에 Java 11과 IntelliJ가 설치 되어있어야 한다. Java 11, IntelliJ 설치방법 : https://deftkang.tistory.com/186 스프링 부트 스타터 사이트에서 스프링 프로젝트 생성. 예전에는 스프링 프로젝트를 밑바닥부터 생성했다면 요즘에는 스프링 부트를 이용해서 스프링 프로젝트를 만든다. 아래 사이트 들어가서 스프링 프로젝트를 생성할 수 있다. 스프링에서 운영하고 있는 사이트이다. https://start.spring.io Project에서 Maven과 Gradle이 있는데 이는 필요한 라이러리를 땡겨오고, 빌드해주는 라이프 사이클을 관리해주는 툴이다. 예전에는 Maven을 많이 사용했지만 지금은 Gradle을 많이 사용하여 Gradle을 선택한다. Maven은 ..
스프링의 정의 스프링의 정의를 통해 스프링이 어떤 것인지 큰 그림으로 이해하려고 노력해야 한다. 따라서 정의를 이해하려는 노력은 스프링을 깊이 이해하고 그 가치를 파악하는 데 도움이 될 것이다. 스프링의 여러가지 정의가 있지만 가장 대표적인 정의는 이렇다. "자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크" 정의를 봐도 스프링이 무엇인지 감이 바로 오지 않을것이다. 하지만 이 정의에 스프링의 중요한 특징이 잘 담겨 있다. 그래서 이 정의를 하나씩 풀어봐야 한다. 애플리케이션 프레임워크 프레임워크란, 특정한 목적에 맞게 프로그래밍을 쉽게 하기 위한 약속 이다. 일반적으로 라이브러리나 프레임워크는 특정 업무 분야나 한 가지 기술에 특화된 목표를 가지고 만들어진다. 그래서 프레임..
Dao의 분리 이유개발자가 객체를 설계할 떄 가장 염두에 둬야 할 사항은 바로 미래의 변화를 어떻게 대비할 것인가 이다. 왜냐하면 오브젝트에 대한 설계와 이를 구현한 코드가 변하기 때문이다. 만약 2명의 개발자에게 동일한 기능 변경을 요청했다고 하자. 그런데 한 명은 단 몇줄의 코드만 수정하고 다른 개발자는 5시간이 걸렸다. 어떻게 변경이 일어날 때 필요한 작업을 최소화할까? 그것은 분리와 확장을 고려한 설계가 있었기 때문이다. 변화가 한 번에 한 가지 관심에 집중돼서 일어난다면, 우리가 준비해야 할 일은 한가지 관심이 한 군데에 집중되게 하는 것이다. 즉 관심이 있는 것끼리는 모으고, 관심이 다른 것은 따로 떨어져 있게 하는 것이다.프로그래밍의 기초 개념중에 관심사의 분리(Separation of Co..
스프링이란스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크다. 애플리케이션 프레임워크는 애플리케이션 개발을 빠르고 효율적으로 할 수 있도록 애플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, 기술 API를 제공해준다. 스프링을 이해하기 위한 방법스프링은 자바를 기반으로 한 기술이다. 스프링이 자바에서 가장 중요하게 가치르르 두는 것은 바로 객체지향 프로그래밍이 가능한 언어라는 점이다. 스프링이 가장 관심을 많이 두는 대상은 오브젝트다. 스프링을 이해하려면 먼저 오브젝트에 깊은 관심을 가져야 한다. 오브젝트에 대한 관심은 오브젝트의 기술적인 특징과 사용 방법을 넘어서 오브젝트의 설계로 발전하게 된다. 객체지향 설계(object oriented design)의 기초와 원칙을 ..