분류 전체보기

    JPA 기본키 생성 전략, @GeneratedValue 사용시 주의점

    JPA로 테이블과 엔티티를 매핑할 때, 식별자로 사용할 필드 위에 @Id 어노테이션을 붙여 테이블의 Primary Key와 연결 시켜줘야한다. 이 때, 컬럼 명을 따로 지정하지 않으면, 관례에 따라 매핑되는 테이블 컬럼명은 camelCase로 작성된 필드명을 snake_case로 바뀐 테이블 컬럼을 찾아서 매핑시켜준다. ex) memberId -> member_id , orderItemId -> order_item_id @Column 어노테이션을 활용하여 테이블의 pk 컬럼을 따로 지정할 수도 있다. public class Member { @Id @Column(name = "member_id") // 컬럼명 따로 지정 private Long id; } 이렇게 @Id로 식별자필드와 테이블의 PK를 매핑만 ..

    IntelliJ에서 자동정렬 시 짧은 어노테이션 뒤에 줄바꿈 방지

    Spring과 Lombok을 사용하다보면 위 그림 처럼 @AutoWired 라든지, @Getter, @Setter처럼 짧은 어노테이션을 사용할 일이 많다. 그런데 자동정렬 기능을 사용하면 아래 그림처럼 짧은 어노테이션들이 모두 한 줄씩 차지하게 되어 보기 코드가 보기 싫어지게 포맷된다. 짧은 어노테이션은 따로 한 줄을 차지 하지 않도록 자동 포매팅 속성을 바꾸려면, Settings - Code Style - Java - Field annotations 속성을 Wrap if long 으로 바꿔주고, 그 하위 속성인 Do not wrap after single annotation 에 체크해주면, 짧은 어노테이션은 변수명과 같이 붙어서 보기 좋게 자동정렬이 된다.

    컴포넌트 스캔과 의존관계 자동 주입 시작하기

    구성정보를 지정하는 AutoAppConfig.java 클래스를 만든다. @Configuration @ComponentScan( basePackages = "hello.core.member", // 탐색할 패키지의 시작 위치를 지정한다. basePackageClasses = AutoAppConfig.class, //AutoAppConfig가 위치한 패키지를 basePackage 삼는다. excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) // 보통 실무에서는 @Configuration을 따로 제외하지 않지만, 기존 예제코드 최대한 남기기 위해 사용함. // 컴포넌트 스캔을 사용하면..

    [AppConfig] 앱의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고, 연결하는 기획자.

    애플리케이션을 하나의 공연이라고 생각해보자. 연극을 하는 배우가 직접 상대배우를 섭외하고 무대 진행 순서를 짠다면, 그 배우는 너무 많을 역할을 맡고 있다는 생각이 들 것이다. 이런 불상사를 방지하기 위해서는 유능한 공연 기획자가 필요하다. 객체지향의 SOLID원칙을 지키기 위해, 스프링에서는 AppConfig라는 설정클래스를 기획자 역할로 두어, 애플리케이션이 어떻게 동작해야 할지 전체 구성을 책임진다. 애플리케이션의 실제 동작에 필요한 구현 객체를 생성하는 기획자, AppConfig @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRep..

    스프링부트가 처음 실행될 때. @SpringBootApplication에 관하여.

    스프링부트를 실행하면 맨 처음 [Artifact명]Application으로 명명된 메인 어플리케이션 클래스의 메인메소드가 실행된다. 메인 어플리케이션을 살펴보면 다음과 같이 되어있다. @SpringBootApplication public class CoreApplication { public static void main(String[] args) { SpringApplication.run(CoreApplication.class, args); } } 위의 코드에서 @SpringBootApplication 어노테이션을 살펴보자. 해당 어노테이션은 아래의 3가지 어노테이션을 모두 포함하고 있는 어노테이션이다. @SpringBootConfiguration @EnableAutoConfiguration @Comp..

    [프로젝트 생성] start.spring.io를 통해 프로젝트 생성하는 법

    https://start.spring.io/ 에서 초기 프로젝트를 취향에 맞게 구성한다. 이렇게 받은 압축파일을 풀고, IDE에서 해당 소스파일을 불러온다. intllij 기준으로 open -> 폴더 내 bulid.gradle 선택하여 설정파일을 불러옴. 맨 처음 프로젝트를 열면 그레이들이 라이브러리를 전부 다운로드 받으므로 로딩에 어느정도 시간이 소요된다. 프로젝트가 잘 불러와졌는지 main - java - [group.artifact명] - [artifact]Application 을 실행하여 확인해보자! 추가적으로 Lombok 사용을 위해 settings - Annotation Processors 에서 Enable annotation processiong에 체크를 해준다.

    입력값 동적 추가기능 구현시, 추가 버튼(+) css로 쉽게 제어하는 법

    jquery로 파일 업로드 추가 또는 옵션 추가 동작을 구현할 때, 간단히 css로 제어버튼을 숨겨서 UI를 구성하는 방법이다. 맨 처음, 옵션 항목(또는 파일 업로드 input값)이 하나일 때는 아래와 같이 + 버튼이 표시되도록 한다. + 버튼을 누르면, jquery로 한 줄의 옵션 그룹을 찍어내고, 맨 위의 + 버튼은 사라지게 만든다. 이같은 동작을 jquery로 일일히 지워주는 것 보다, css의 :nth-child(n) 선택자를 활용하여 제어하면 편하게 구현할 수 있다. 옵션그룹의 개수 제한을 3개로 정하였고, 3개의 옵션 그룹이 나타나면, + 버튼을 화면에서 감춰, 사용자로 하여금 더 이상 옵션그룹을 늘리지 못하도록 하며, 3개가 최대 개수라는 걸 ui 구성으로 알려준다. css 코드는 아래와 ..

    [git] 원격저장소 업데이트 명령어 3가지의 차이점 비교 -git remote update , git fetch , git pull 의 차이.

    이전 포스트를 작성하면서 궁금한 점이 생겨서 곧바로 찾아보았다. [git] 새로 만든 원격 브랜치로 checkout이 안될 때. - error: pathspec did not match any file(s) known to git 해결 상황 : 기존 프로젝트를 리팩토링하며 리모트 저장소에 refactoring 브랜치를 하나 파서, 회사pc에서 작업 했다. 그 후, 집에 와서 refactoring 브랜치로 체크아웃 해서 작업하려고 git checkout refactoring 명 devcamus.tistory.com 원격 브랜치를 업데이트하는 방법에 다룬 포스트인데, 참고한 스택오버플로우 답변글에서는 원격 저장소 브랜치를 찾지 못할 때, git remote update git fetch git checkou..

    [git] 새로 만든 원격 브랜치로 checkout이 안될 때. - error: pathspec did not match any file(s) known to git 해결법

    상황 : 기존 프로젝트를 리팩토링하며 리모트 저장소에 refactoring 브랜치를 하나 파서, 회사pc에서 작업 했다. 그 후, 집에 와서 refactoring 브랜치로 체크아웃 해서 작업하려고 git checkout refactoring 명령어를 입력하니, 다음과 같은 에러메세지를 마주했다. error: pathspec 'refactoring' did not match any file(s) known to git 해당 에러는 로컬 저장소의 git과 리모트 저장소의 git 정보가 동기화 되지 않아서, 새로 만들어진 리모트 저장소 브랜치를 참조할 수 없기에 발생하는 에러다. 그러므로 아래 명령어로 원격 브랜치를 업데이트 한 뒤 checkout을 실행하면 잘 동작한다! git remote update gi..

    [Laravel] 라라벨 블레이드 템플릿 문법 기초

    블레이드는 라라벨에서 제공하는 템플릿 엔진이다. 한마디로, "MVC패턴에서 view파일을 구성하고 표현하기 쉽게 만든 라라벨이 제공하는 템플릿"이 바로 "블레이드"이다. 블레이드 파일은 파일명.blade.php형식의 확장자 형태를 가지며, 주로 resources/view 폴더 아래에 위치하여 사용한다. 블레이드 템플릿 문법은 간단하고 직관적이어서 러닝 커브가 상대적으로 낮다. 기존 php 문법에 익숙한 개발자라면 기초적인 사용 방법만 익혀두고 몇 번 써보면 쉽게 익숙해질 수 있을 것이다. 그럼 블레이드의 기초 문법을 알아보자. 공식문서에는 템플릿 상속을 이용한 레이아웃 확장 부분부터 나오는데, 상속과 섹션 정의로부터 얻는 얻는 편리함이 바로 블레이드의 가장 큰 장점이기 때문에 그런 것 같다. 하지만 가장..