본문 바로가기

CS 잡지식

인텔리J, 서버 실행 중 코드 수정(feat. Build -> recompile) 지금 서버가 실행 중이라고 가정을 하자. 위 그림에서 "@RequestMapping("/")"을 아래와 같이, "@RequestMapping("/home")"으로 바꾸려고 한다. 보통의 사람들의 경우, 현재 실행 중인 서버를 일단 닫고, 수정 후 다시 서버를 실행하는 귀찮은 행동을 한다. 그러나, 서버를 닫지 않고도 코드를 수정할 수 있는 방법이 있다. STEP 1 . build.gradle에 아래 라이브러리를 추가한다. implementation 'org.springframework.boot:spring-boot-devtools' STEP 2. Build -> Recompile 버튼을 누르면, 서버가 닫히지 않고도 수정된 해당 파일만 다시 빌드되어 서버에 올라간다. 위 방법은 [수동]으로 recompi.. 더보기
인텔리J에서 문자열 찾는 단축키 (feat. [ctrl + alt + P]) 인텔리J 프로젝트에서 어떤 클래스가 어디 어디에 사용되었는지, 어떤 메서드가 어디 어디 사용되었는지, 게다가 주석에 뭔가 중요한 것을 적어 놓았는데, 그게 어디에 있는 것이지 이와 같은 것들을 찾을 때, 유용한 단축키가 있다. [ctrl + alt + P] : 프로젝트 전체에서 어떠한 문자열의 모든 위치를 알려 준다. 더보기
메서드 추출 단축키 (feat. [ctrl+alt+M] ) 메서드로 추출하고 싶은 부분을 드래그 한다. 그 다음 [ctrl + alt + M]을 클릭하면, 아래와 같이 인텔리제이가 자동으로 메서드를 만들어 준다. 더보기
IntelliJ 템플릿 만들기 1] File -> Setting 2] "template"이라고 검색 3] "Live Template" 클릭 4] 본인은 jpaid, tdd로 템플릿을 만들어 놓았다. 더보기
서버 개발의 이상적인 순서(feat.도메인 모델 Pattern, 트랜잭션 스크립트 Pattern) (여기서는 도메인 모델 Pattern으로 설명을 하겠다) 도메인 모델 Pattern : 도메인에서 비지니스 로직을 대부분 정의하고, 각 계층(Repository, Service, Controller)에서는 도메 인 엔티티 객체를 해당 계층에서 생성 및 주입을 받아서, 도메인 엔티티에서 구현한 비지니스 로직 메서드를 호출하여, 필요한 요청을 위임하는 Pattern. - 이상적인 서버 개발 순서 - 1. 요구사항 분석 2. 도메인 모델 분석 3. DB Table 모델링 4. [2~3]을 바탕으로 도메인의 엔티티를 JPA를 이용하여, 연관 관계 매핑, 연관 관계 주인, Lazy 설정, 양방향/단방향 설정, 연관 관계 객체 선언, fetch join, cascade, join table 생성 선언, 비지니스 로.. 더보기
객체 지향적 코딩 Tip C 언어를 사용하였을 때를 생각해보자. 어떤 한 단위의 로직을 구현하려고 할 때, 전부 main() 함수에서 그 로직을 구현을 하였다. 그러나, 그것은 객체 지향적이지 못하다. 객체 지향적 코딩에서는 [로직(비지니스 로직, 조회 로직 등)을 main과 같은 클라이언트에서 일일이 작성하는 것이 아니라, 되도록, 그 로직과 관련된 클래스에서 메서드로 만들어 놓고 클라이언트에서는 그 메서드를 호출하는 형식으로 만들어야 한다]. 그렇지 않으면, 클라이언트 코드 부분이 매우 지저분하여 개발자가 직관적으로 코드를 이해하기 어려울 뿐 아니라, 어떠한 로직에서 에러가 예상이 될 때, 지저분하게 코딩된 클라이언트 코드 여기저기를 찾아 다니면서 에러가 없나 확인을 해야 하는 상황이 생긴다. 만약 어떤 1개의 로직을 관련 .. 더보기
Setter는 되도록 최소한으로 사용하고, 지양해야 한다. @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "dtype") @Getter @Setter // 편의상, 일단 setter를 넣어 두었다.(그러나 만약 stockQuantity를 더하고 빼서 변경해야 할 때, // 클라이언트 코드 상, 즉 Item 클래스 밖에서 setter를 이용하여 더하고 빼서 변경하는 것보다는, 아래와 같이 // addStock(), removeStock()과 같은 메서드를 만들어서 밖이 아닌, 안에서 변경하는 것이 보다 객체 지향 적이다. public abstract class Item { @Id@GeneratedValue @Column(name = "item_id").. 더보기
여러 가지의 의존관계 주입 방법과 장/단점 @Service @Transactional(readOnly = true) // public으로 지정된 메서드에 붙는다. // 읽기 전용으로 트랜잭션을 걸면, 성능 최적화가 일어난다. public class MemberService { @Autowired // 의존 관계 주입 방법 1 : 필드 초기화, 단점 : 한 번 의존관계가 주입되면 의존관계 변경 불가능! 테스트할 때에 이리저리 바꿔 보지 못함. MemberRepository memberRepository; @Autowired // 의존 관계 주입 방법 2 : setter Injection, 단점 : 런타임에 이 세터에 의해 의존관계가 변경될 수가 있다! public void setMemberRepository(MemberRepository membe.. 더보기