안녕하세요 강정호 입니다 Mysql -> Postgres DB 마이그레이션을 하기 위해서 포스팅을 합니다. [1단계 - Postgres DB 다운로드] https://www.postgresql.org/download/ PostgreSQL: Downloads www.postgresql.org [2단계 - DB 생성] Postgres shell을 이용해서 "create database board"를 생성한다. [3단계 - DB 연결] [4단계 - application.yaml 변경] Spring initilaize에서 Postgre sql 드라이버를 다운받는다. 위와 같이 postgresql로 연결한다. [Postgre DB 연결 확인] Postgresql DB에 연결된 것을 확인할 수 있다.
안녕하세요 강정호 입니다. 오늘은 게시판 프로젝트에서 게시판 뷰를 만들어보려고 합니다. ArticleController와 index.html에 데이터를 뿌려서 보여줄 예정입니다. ArticleController.java @RequiredArgsConstructor @RequestMapping("/articles") @Controller public class ArticleController { private final ArticleService articleService; /** * 사용 목적 : 검색타입, 검색어, 페이징을 파라메터로 받아서 * article 리스트를 응답해주는 api * */ @GetMapping public String articles( @RequestParam(required = ..
안녕하세요 강정호 입니다. 오늘은 게시판 프로젝트에서 게시판 뷰를 만들어보려고 합니다. ArticleController와 index.html에 데이터를 뿌려서 보여줄 예정입니다. ArticleController.java @RequiredArgsConstructor @RequestMapping("/articles") @Controller public class ArticleController { private final ArticleService articleService; /** * 사용 목적 : 검색타입, 검색어, 페이징을 파라메터로 받아서 * article 리스트를 응답해주는 api * */ @GetMapping public String articles( @RequestParam(required = ..
1.깃 이그노어 https://github.com/djkeh/fastcampus-project-board/pull/23 .gitignore 에 jpa buddy 플러그인의 설정 파일을 무시하도록 룰 추가 by djkeh · Pull Request #23 · djkeh/fastc intellij plugin 중 jpa 작업을 편하게 해주는 jpa buddy 라는 플러그인으로 인해 자동 생성되는 설정 파일이 프로젝트에 포함되지 않도록 파일 무시 규칙을 추가함 github.com 2. https://github.com/djkeh/fastcampus-project-board/pull/24 도메인 수정 - 회원 계정과 게시글, 댓글 관계 연결 by djkeh · Pull Request #24 · djkeh/fas..
안녕하세요 강정호 입니다. 이번에는 게시글 서비스를 테스트하는 로직을 구현해보려고 합니다. ArticleServiceTest 코드 package com.marathon.board.service; import java.util.List; import com.marathon.board.domain.type.SearchType; import com.marathon.board.dto.ArticleDto; import com.marathon.board.repository.ArticleRepository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; i..
[BootStrap 다운받기] https://getbootstrap.com/docs/5.3/getting-started/introduction/ Get started with Bootstrap Bootstrap is a powerful, feature-packed frontend toolkit. Build anything—from prototype to production—in minutes. getbootstrap.com - 부트스트랩은 CDN 방식으로 다운 받을 수 있다. 이 경우 서버가 올라갈 때 인터넷을 통해서 부트스트랩을 다운 받는 방법이기 때문에 시간이 오래 걸린다. 그래서 서버내 폴더에 라이브러리를 다운 받는 방법도 있다. 하지만 이번 내 프로젝트에서는 CDN 방식 사용. [부트스트랩 적용하..
Rebase merge란? 스프링 시큐리티, 타임리프, 스프링 웹 이렇게 3개의 디펜던시를 해야 아래처럼 나온다 plugins { id 'java' id 'org.springframework.boot' version '3.0.6' id 'io.spring.dependency-management' version '1.1.0' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org...
Thymleaf 엔진 - Decoupled Template Logic
안녕하세요 강정호 입니다. 오늘은 Querydsl 의존성 추가와 api 검색옵션을 추가하는 개발을 하였습니다. Querydsl이 무엇이고 검색기능 구현을 위해서 어떻게 사용하는지 알아보겠습니다. Querydsl이란 무엇인가? Querydsl은 자바언어를 사용하여 타입세이프한 쿼리를 작성하는데에 도움을 주는 오픈소스 프레임워크이다. 기존에는 Mybatis를 이용해서 직접 SQL문을 작성하거나, JPQL을 사용하여 쿼리문을 만들었다. 하지만 이런 경우 쿼리문 상에 오타가 있을 수 있기 때문에 관리가 어려웠다. 그리고 DB의 종류(오라클, Mysql, MongoDB 등)에 따라서 쿼리문을 다르게 작성해주어야 했다. 하지만 이를 보완하는 것이 Querydsl이다. Querydsl은 데이터베이스에 상관없이 일관성..
안녕하세요 강정호입니다. 오늘은 Spring Data REST 복습을 해보려고 합니다. Spring Data REST의 깃헙 프로젝트 https://github.com/spring-projects/spring-data-rest GitHub - spring-projects/spring-data-rest: Simplifies building hypermedia-driven REST web services on top of Spring Data reposit Simplifies building hypermedia-driven REST web services on top of Spring Data repositories - GitHub - spring-projects/spring-data-rest: Simpli..
안녕하세요 강정호 입니다. 오늘은 스프링부트의 @MappedSuperclass와 @EntityListners 에 대해서 알아보겠습니다. @MappedSuperclass란? 객체 입장에서 공통 맵핑 정보가 필요할 때 사용한다. [예시] 위와 같이 Article이라는 도메인에 생성자, 생성시각, 수정자, 수정시각이 있다. 이러한 공통정보를 추출해서 공통의 정보로 사용할 때 @MappedSuperclass를 사용한다. 이렇게 아래와 같이 새로운 클래스로 생성한다. AuditingFields라는 새로운 클래스에는 생성자, 생성시각, 수정자, 수정시각 등 공통정보가 들어가 있다. 그리고 위 AuditingFields 클래스를 사용하기 위해서는 도메인 객체에서 extends로 상속을 받아야 한다. @EntityLi..
안녕하세요 강정호입니다. 오늘 패스트캠퍼스에서 배우는 6번째 수업에 대해 포스팅 할게요 1교시- 프로그래밍이 무엇인가? 1) 요구사항을 아키텍쳐에 기반하여 구현하는 것2) 아키텍쳐의 중요성 : 프로그래머가 곧 아키텍트이다. 3) 알고리즘 문제 푸는 것은 어떤 아키텍쳐를 생각해서 구현하는 것과는 다르다알고리즘이 논리적인 사고 방식을 표현하는 것에는 적합하다. - 참조 아키텍쳐 : 비슷한 도메인으로 구현한 것에서 아키텍쳐를 모방해 온다.1) 우리한테 맞는 부분을 가져오고, 그렇지 않은 부분을 제외한다. - 개발 사이클을 짧게 잡자!1) 회원가입, 로그인을 2주동안 만들고 고객에게 보여주자.2) 고객이 보고, "이건 아닌데?" 하면서 피드백을 받는다.3) 나머지 2주 동안 다른 기능을 개발한다.4) 피드백을 ..
Jar 파일 만드는 방법- Intellij 우측에 Maven project 클릭.- Life Cycle에서 Package 클릭 --> 빌드- target 폴더의 jar 파일 생성- java -jar jar 이름을 실행. 커스터마이징 스타터 제작하기- starter 프로젝트- Stickershop 프로젝트 실행하기- import maven 프로젝트- Maven project - lifecylce : test는 실행 스킵하게 설정- life cycle package 더블클릭 : 자동으로 Q 클래스 빌드한다 아스키 아트 추가하기- http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20- resource 폴더 아래 banner.t..
안녕하세요 강정호입니다.오늘은 JPA N:M 관계 즉 다대다 관계에 대해서 공부해 볼게요. N:M 관계Table 측면Member와 Role은 N:M 관계이다. 테이블을 생성할 때는 다대다 관계를 이루면 안되기 때문에 두 테이블 사이에 복합키(member_id, member_role_id)를 가지는 테이블을 만들어 1대다 관계를 만들어 준다. Member 테이블//@ManyToMany(cascade = {CascadeType.ALL}) //우리가 사용하는 Role정보는 이미 DB에 저장되어 있다. @ManyToMany @JoinTable(name="member_member_role", joinColumns = @JoinColumn(name="member_id", referencedColumnName = "..
안녕하세요 강정호입니다.패스트 캠퍼스 스프링 부트 강의 4번째 수업에 대한 강의 내용을 적어보겠습니다. 오늘 학습 주제Spring Security를 이용.- 회원정보 (id, password)- Role에 대한 정보. - 어떤 회원이 관리자 권한, 일반 권한을 가지는 것 회원 ---------> Role관계? 1명의 회원은 여러 Role을 가질 수 있다1개의 Role은 여러 회원을 가질 수 있다.--> 즉 다대다 관계이다. 다대다 관계에서는 Join table을 사용한다. 회원가입로그인로그아웃 @ManyToMany@JoinTable : 다대다 관계에서 조인 관계를 맺을 때 복합키를 가지는 테이블이 필요하다.ex) @JoinTable(name="member_member_role") Board가 카테고리 관..
안녕하세요 강정호입니다. 오늘은 영속성 컨텍스트에 대해 공부해 볼게요.JPA를 이해하기 위해서는 영속성 컨텍스트와 엔티티 매니저에 대한 이해가 필수입니다. 영속성 컨텍스트란?- Server side와 Database 사이에 엔티티를 저장하는 논리적인 영역이라고 할 수 있다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. - 영속성 컨텍스트는 엔티티 매니저(Session)를 생성할 때 하나 만들어진다. 그리고 엔티티 매니저(Session)을 통해서 영속성 컨텍스트에 접근할 수 있고 영속성 컨텍스트를 관리할 수 있다. 영속성 컨텍스트가 왜 좋은가?1차 캐시- Map 객체로 저장 : 엔티티를 식별자 값(@Id 맵핑)으로 구분한다. Key-value로..
안녕하세요 강정호입니다. 오늘을 스프링 부트에서 엔티티를 맵핑하는 방법과 테스트 코드 작성에 대해 알아볼게요. 이렇게 Category와 Board는 다음과 같이 1:N 관계를 맺고 있습니다. 1개의 카테고리는 여러개의 게시물을 갖는 것이지요. 그렇다면 엔티티는 다음과 같이 생성됩니다. Board 엔티티@Entity @Table(name = "board") @Getter @Setter public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String title; private String content; private int readCount..
안녕하세요 강정호입니다. 오늘은 JPA에 대해 공부 해볼게요. JPA를 사용하는 이유?SQL 중심적인 개발에서 객체 중심으로 개발생산성과 유지보수성패러다임의 불일치 해결객체 지향성과 SQL의 불일치.성능 : 이것은 확실하지 않다. 1차 캐시와 관련된 것이다.데이터 접근 추상화와 벤더 독립성JPA를 사용하게 되면 SQL이 자동으로 각 DBMS(MySQL, Oracle)에 맞게 생성되어 독립적으로 된다. 영속성 컨텍스트(Persistence Context)- Entity를 영구 저장하는 환경 - 논리적인 개념에 가깝다. 영속성 컨텍스트는 엔티티 매니저를 생성할 때 하나 만들어진다. 그리고 엔티티 매니저는 영속성 컨텍스트에 접근할 수 있고, 영속성 컨텍스트를 관리할 수 있다.- 엔티티 매니저 : 영속적 환경을..
1. Spring Boot datasource 설정 검색 spring.datasource.initialization-mode= always어플리케이션이 시작될 때 직접 데이터 초기화 하는 것. import.sql 커넥션풀보다 요청량이 많으면 클라이언트들이 대기해야 한다. 커넥션 JPA를 사용하는 이유- 패러다임의 불일치 해결 : 객체지향과 SQL의 불일치- 성능 : 이건 확실하지 않다.- 데이터 접근 추상화와 벤더 독립성 : JPA를 사용하면 SQL이 각 DBMS(MySQL, Oracle)에 따라 만들어져서 독립적이다. 영속성 컨텍스트 트랜잭션- PlatformTransactionManager가 트랜잭션을 관리해 주는 역할을 한다.- 최초에 SELECT을 할 때는 엔티티 매니저가 SQL문을 만들어서 DB..
안녕하세요 강정호입니다. 오늘은 Spring의 트랜잭션에 대해 공부해 볼게요. 트랜잭션이란?트랜잭션은 여러 작업이 구성되어 있는 하나의 작업 단위입니다. 예를 들어서 쉽게 설명 해볼게요.출금을 하려면 여러가지 일들이 같이 순차적으로 이루어져야 해요.1) 계좌 잔액 조회2) 출금하려는 금액과 계좌 잔액 비교3) 출금4) 로깅이렇게 4가지 작업이 모두 수행되어야 합니다. 이 4가지 작업을 합한 것이 하나의 트랜잭션 단위가 되는 것입니다. 트랜잭션의 특징은 4가지의 작업 중 1개만 에러가 발생할 경우 바로 원상 복구를 해야합니다. 그것을 rollback 이라고 합니다. 4가지 작업이 모두 정상적으로 이루어졌다면 commit을 합니다. 즉, 트랜잭션 관리는 이러한 작업들의 성공여부에 따라 원상 복구 또는 적용하..
- Total
- Today
- Yesterday
- 인셉션
- docker
- 2023년
- resize
- Use case
- 깃허브
- 도커
- 월부닷컴
- 개발자 회고
- 작성 방법
- 부동산공부
- push_back
- 재테크공부
- front
- 폭포수
- 열반스쿨기초반
- 월급쟁이부자들
- 깃
- 바
- 내년은 빡세게!!
- 파라메터
- 관계대수
- pop_back
- 유즈케이스
- github
- GIT
- ```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
- 회고
- Spring boot
- Inception
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |