🌱JAVA/Spring16 [Spring] 설정 파일 값 암호화 및 적용하기 (feat. Jasypt) 개요프로그램을 개발한 후 프로젝트를 외부에 배포하기 위해 회사 내부 정보를 암호화해야 했다. 우선 가장 대중적이고 래퍼런스가 많은 Jasypt 라이브러리를 사용해 DB 접속 정보를 암호화하기로 했다. 의존성 추가라이브러리https://github.com/ulisesbocchio/jasypt-spring-boot GitHub - ulisesbocchio/jasypt-spring-boot: Jasypt integration for Spring bootJasypt integration for Spring boot. Contribute to ulisesbocchio/jasypt-spring-boot development by creating an account on GitHub.github.com Gradle.. 🌱JAVA/Spring 2024. 6. 25. [Spring Boot] 단위 테스트 성공 시 Spring Rest Docs 파일 생성 API 문서화 프로젝트를 진행하다 보면 다른 업체와 협업을 하거나 프로젝트 정보를 공유하는 경우가 생기게 된다. 많은 API를 모두 설명할 수 없어서 보통은 API 문서를 사용해서 통신에 필요한 정보를 제공하곤 한다. API 문서화 도구를 사용하지 않고도 직접 html 파일로 작성하거나 다른 프로그램으로 작성할 수 있다. 하지만 그렇게 되면 개발과 문서 작업 둘 다 병행해야하기 때문에 많은 시간과 인력을 낭비하게 된다. 그리고 수작업으로 진행하다보면 내용을 빼먹는 경우도 생기게 된다. 그렇기 때문에 대부분 API 문서화 도구 사용을 추천한다. Swagger vs Spring REST Docs 많이 사용하는 API 문서화 도구로는 Swagger와 Spring Rest Docs가 있다. Swagger 장점 .. 🌱JAVA/Spring 2024. 1. 2. [Spring Boot] 단위 테스트 코드 작성 (JUnit 5) Unit 테스트 Java에서 지원하는 JUnit 프레임워크를 이용해 단위 테스트를 실시하는 것을 Unit 테스트라고 한다. @Test 어노테이션이 붙은 함수 및 메소드를 테스트하는 것이다. Spring에서 단위 테스트를 하는 것은 Spring 컨테이너에 올라간 Bean들을 테스트하는 것이다. 단위 테스트를 하는 이유는 작성이 간편해 빠르게 테스트가 가능하고, 불필요한 리소스를 낭비하지 않을 수 있다. JUnit5 어노테이션 @Test JUnit은 각각의 테스트가 서로 영향을 주지 않고 독립적으로 실행되는 것을 원칙으로 한다. 따라서 테스트(메소드)마다 객체를 별도로 생성한다. JUnit4에서는 메소드의 접근제한자를 public으로 선언해야 사용할 수 있었다. JUnit5로 넘어온 후 접근제한자가 Defa.. 🌱JAVA/Spring 2024. 1. 2. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 13 EC2 서비스 시작하기 EC2란? AWS에서 제공하는 성능,용량 등을 유동적으로 사용할 수 있는 서버다. 보통 AWS에서 '리눅스 서버 혹은 윈도우 서버를 사용합니다'라고 하면 EC2를 이야기하는 것이다. EC2란 이름은 Elastic Compute Cloud에서 C가 2개 있어서 C2라는 이름이 붙었다. AWS에서는 대부분 첫 글자가 중복되면 숫자로 표기한다. 비슷한 예로 AWS의 S3는 Simple Storage Service를 줄여 S가 3개라고 하여 S3이다. AWS에서 무료로 제공하는 프리티어 플랜에서는 EC2 사용에 아래와 같은 제한이 있다. 사양이 t2.micro만 가능하다. vCPU(가상 CPU) 1 Core, 메모리 1GB 사양이다. 보통 vCPU는 물리 CPU 사양의 절반 정도의 성능을.. 🌱JAVA/Spring 2023. 6. 17. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 12 AWS 회원가입 및 EC2 서버 설정 AWS(Amajon Web Service)라는 클라우드 서비스를 이용해 본격적으로 서버 배포를 진행하겠다. 외부에서 본인이 만든 서비스에 접근하려면 24시간 작동하는 서버가 필수이다. 24시간 작동하는 서버에는 3가지 선택지가 있다. 집에 PC를 24시간 구동시킨다. 호스팅 서비스(Cafe 24, 코리아 호스팅 등)을 이용한다. 클라우드 서비스(AWS, AZURE, GCP 등)을 이용한다. 일반적으로 비용은 호스팅 서비스나 집 PC를 이용하는 것이 저렴하다. 만약 특정 시간에만 트래픽이 몰린다면 유동적으로 사양을 늘릴 수 있는 클라우드가 유리하다. 클라우드란? 단순히 물리 장비를 대여하는 것이 아니고, 쉽게 말하면 인터넷(클라우드)을 통해 서버, 스토리지(파일 저장소.. 🌱JAVA/Spring 2023. 3. 19. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 11 어노테이션 기반으로 개선하기 같은 코드가 반복되는 부분은 일반적인 프로그래밍에서 개선이 필요한 나쁜 코드 중 하나이다. 같은 코드를 계속해서 복사 & 붙여넣기로 반복하게 만든다면 이후에 수정이 필요한 경우 모든 부분을 하나씩 찾아가며 수정해야만 한다. 이렇게 될 경우 유지보수성이 떨어질 수 밖에 없으며 혹시나 수정이 반영되지 않은 코드가 있다면 문제가 발생할 수 밖에 없다. 지금까지 작성한 코드 중에서 개선할만한 것은 무엇이 있을까? 책의 저자는 IndexController에서 세션값을 찾아오는 아래의 코드라고 생각한다. SessionUser user = (SessionUser) httpSession.getAttribute("user"); index 메소드 외에 다른 Controller와 Method에서.. 🌱JAVA/Spring 2023. 1. 21. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 10 Application-oauth 등록 이전에 만들었던 application.properties가 있는 src/main/resources/ 디렉토리에 application-oauth.properties 파일을 생성한다. 생성한 파일에 아래와 클라이언트 ID와 클라이언트 보안 비밀코드를 아래와 같이 등록한다. spring.security.oauth2.client.registration.google.client-id=클라이언트 ID spring.security.oauth2.client.registration.google.client-secret=클라이언트 보안 비밀 코드 spring.security.oauth2.client.registration.google.scope=profile,email scope=pr.. 🌱JAVA/Spring 2023. 1. 20. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 09 스프링 시큐리티 (Spring Security) 막강한 인증(Authentication)과 인가(Authorization) 기능을 가진 Framework이다. 스프링 기반의 애플리케이션에서 보안을 위한 표준이다. 인터셉터, 필터 기반의 보안 기능을 구현하는 것보다 스프링 시큐리티를 통해 구현하는 것을 적극적으로 권장한다. 스프링의 대부분 프로젝트들(Mvc, Data, Batch 등)처럼 확장성을 고려한 프레임워크다 보니 다양한 요구사항을 손쉽게 추가하고 변경할 수 있다. 이런 손쉬운 설정은 특히나 스프링 부트 1.5에서 2.0으로 넘어가면서 더욱 강력해졌다. 스프링 시큐리티와 스프링 시큐리티 OAuth2 클라이언트 많은 서비스에서 로그인 기능을 id/password 방식보다는 구글, 카카오, 네이버 로그.. 🌱JAVA/Spring 2023. 1. 18. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 08 전체 조회 화면 만들기 1. index.mustache UI 변경 우선 index.mustache 파일의 코드에 아래와 같이 추가해준다. {{>layout/header}} 스프링 부트로 시작하는 웹 서비스 Ver.2 글 등록 게시글번호 제목 작성자 최종수정일 {{#posts}} {{id}} {{title}} {{author}} {{modifiedDate}} {{/posts}} {{>layout/footer}} 추가된 부분에서 Mustache의 문법이 처음으로 사용된다. {{#posts}} {{/posts}} posts라는 List를 가져온다 Java의 for문과 동일하게 생각하면 된다. {{변수명}} List에서 뽑아낸 객체의 필드를 사용한다. 2. PostsRepository, PostsService,.. 🌱JAVA/Spring 2023. 1. 8. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 07 Mustache로 화면 구성하기 템플릿 엔진이란? 웹 개발에 있어서 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어를 말한다. JSP, Freemarker, Vue, React 등이 있다. 다만 JSP와 Freemarker는 서버 템플릿 엔진이라 불리고 Vue와 React는 클라이언트 템플렛 엔진이라 불린다. Q) JavaScript에서 JSP나 Freemarker처럼 Java 코드를 사용할 수는 없을까? 예시 코드 코드를 보면 css와 js의 위치가 서로 다르다. 페이지의 로딩속도를 높이기위해 css는 header.mustache에, js는 footer.mustache에 위치했다. HTML은 위에서부터 코드가 실행되기 때문에 head가 전부 실행되고나서 body가 실행된다. 즉.. 🌱JAVA/Spring 2023. 1. 2. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 06 Spring의 웹 계층 Web Layer 흔히 사용하는 Controller와 JSP/Freamwork 등의 뷰 템플릿 영역이다. 이외에도 Filter, Interceptor, ControllerAdvice 등 외부 요청과 응답에 대한 전반적인 영역을 이야기한다. Service Layer @Service에 사용되는 서비스 영역이다. 일반적으로 Controller와 DAO의 중간 영역에서 사용된다. @Transactional이 사용되어야 하는 영역이기도 하다. Repository Layer Database와 같이 저장소에 접근하는 영역이다. 기존에 개발 경험이 있다면 DAO(Data Access Object)와 같은 영역이라고 생각하면 된다. DTOs DTO(Data Transfer Object)는 계층 간.. 🌱JAVA/Spring 2022. 12. 1. [Spring Boot] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 05 MyBatis, iBatis는 ORM이 아니고 SQL Mapper이다. ORM은 객체를 매핑하는 것이고,SQL Mapper는 쿼리를 매핑한다. 현대의 웹 애플리케이션에서 관계형 데이터베이스(RDB, Relational Database)는 빠질 수 없는 요소이다. Oracle, MySQL, MSSQL 등을 쓰지 않는 웹 애플리케이션은 거의 없다. 객체를 관계형 데이터 베이스에서 관리하는 것이 무엇보다 중요하다. 관계형 데이터베이스가 계속해서 웹 서비스의 중심이 되면서 모든 코드는 SQL중심이 되어간다. 현업 프로젝트 대부분이 애플리케이션 코드보다 SQL로 가득하게 됐다. 이는 관계형 데이터베이스가 SQL만 인식할 수 있기 때문인데, SQL로만 가능하니 각 테이블마다 기본적인 CRUD(Create, Read.. 🌱JAVA/Spring 2022. 11. 15. 이전 1 2 다음