2024. 10. 6. 07:53ㆍ인프런 워밍업 클럽/발자국
발자국 내용은 딱히 형식이 정해져 있지 않아서 발자국 쓰기 전날까지 들었던 강의들 중, 모르는 내용들을 적어서 내가 다시 봤을 때, "아 맞다!" 라는 말이 나올 정도로만 적을 예정이다!
목차
- 모르는 내용 정리
- 미션 해결 과정
- 회고
1. 모르는 내용 정리
<Gradle>
Gradle : Gradle은 Groovy를 기반한 빌드 관리 도구.
- 빌드 관리 도구 : 프로젝트 내에서 다양하게 외부 라이브러리와 로컬 레포지토리에서도 라이브러리 별로 버전 관리를 해야할 때 용이
- Gradle이 왜 필요할까?
- Gradle
- groovy 언어를 사용한 Domain-specific-language를 사용 ( 코드가 간결)
- 어느 task가 업데이트 되었는지 체크
- 이미 반영된 빌드 부분은 더이상 재 실행되지 않는다. -> 빌드 시간 단축
- Maven
- java8용 프로젝트 관리 도구 apache의 ant 대안
- 외부 저장소에서 필요한 라이브러리, 플러그인들을 다운로드 한 후 , 로컬 시스템의 캐시에 모두 저장
- 그래서 왜 Gradle인데!!!
- Gradle은 작업 의존성을 그래프, Maven은 고정적이고 선형적 모델을 기반
- Gralde은 어떤 task가 업데이트되었고 안되었는지를 체크
- Gradle은 이미 업데이트 된 task에 대해서는 작업이 실행되지 않으므로 빌드 시간 단축
- 빌드 설정 규모가 작으면 큰 차이를 느끼지 못하지만 규모가 크면 훨씬 Gradle의 빌드 시간이 단축된다는걸 알 수 있다.
- Gradle
- Gradle과 Maven 차이를 알면 Gradle이 왜 필요한지 알 수 있다.
<Dependencies>
- Spring Web : 웹 어플리케이션을 개발하기 위한 핵심 기능 제공
- Thymeleaf : View Template, 동적으로 화면을 구성할 수 있게 해줌
- Spring Data JPA : JPA를 이요한 구현체를 더 추상화시켜 더 쉽고 간편하게 JPA를 이용 가능
- mysql driver : mysql를 연동할 때 필요한 dependency
- h2 database : RDBMS, 테스트 단계 또는 작은 규모의 프로젝트에서 사용
- validation : 데이터에 대한 유효성 검증 처리를 수행
- Spring Security : 홈페이지에 인증 및 권한 기능을 빠르게 부여해 인증 및 권한 보호 기능을 손쉽게 추가할 수 있음.
<프로그램이 시작되는 시작되는 코드>
src/main/kotlin/PortfolioApplicatioin.kt
fun main(args: Array<String>) {
runApplication<PortfolioApplication>(*args)
}
Whitelabel Error Page 오류가 뜨는 이유 : 어플리케이션이 뭘 해야 할지 모르기 때문에 Whitelabel Error Page를 보내줌.(정상)
<Git 용어>
Git : 분산 버전 관리 시스템 ⇒ 협업을 쉽게 해주는 툴 : GitHub
Commit : git에 저장하는 단계
Rollback : 이력 되돌리기
Branch : branch 생성 및 제거, 확인등의 기능을 하는 명령어
Merge : 브랜치 병합
Conflict : 충돌
Repository : 원격 저장소 , 인터넷이나 네트워크 어딘가에 있는 저장소
Push : 로컬 브랜치를 원격 저장소로 푸시할 때 사용하는 기본 명령어
<Git 명령어>
- git init : git 공간으로 초기화
- git status 명령어 입력시 Untracked files 라는 게 있는데 이건 git에서 따로 설정을 안한다는 소리
- https://www.toptal.com/developers/gitignore/ : gitignore 파일을 자동으로 만들어줌
<github에 PUSH 방법>
- 터미널에서 git init
- git remote “git 저장소”
- → 인텔리제이(GUI)로 할 시에는 git → Manage Remote
- commit
- push
<application-default.yml , application-docker.yml>
profile이 default 이면, application-default.yml 파일에서 환경변수를 가져오고
profile이 docker 이면, application-docker.yml 파일에서 환경변수를 가져온다.
application-default.yml 파일에서 spring:jpa:hibernate:ddl-auto:create 인데
왜 application-docker.yml 파일에서는 spring:jpa:hibernamte:ddl-auto:none 일까?
=> application-default.yml 에서는 개발 목적으로 데이터베이스 스키마를 매번 재생성할 필요가 있지만, application-docker.yml 에서는 베포 및 운영 환경에 적합하게 데이터베이스 구조가 변경되지 않도록 하기 위한 설정
<어노테이션 정리>
@Id : 해당 테이블의 PK 필드를 의미
@Entity : JPA를 사용해 테이블과 매핑할 클래스에 붙여주는 어노테이션
@GeneratedValue : JPA에서 Entity의 PK를 생성하여 주는 기능
-> @GeneratedValue(name="member_id") : PK로 사용될 Entity의 프로퍼티에 @Id 어노테이션 선언
-> @GeneratedValue(strategy=GenerationType.IDENTITY) : 기본 키 생성을 데이터베이스에 위임한다.
-> @GeneratedValue(strategy=GenerationType.AUTO) : 기본값으로 DB 방언에 맞춰 자동으로 설정하여 준다.
@Column : 객체 필드와 DB 테이블 칼럼을 맵핑한다.
@Component : 클래스를 자동으로 빈으로 등록하기 위해 클래스 레벨에서 사용
@Profile : 빈이나, 컴퓨넌트에게 프로필을 정해줄 수 있음
@PostConstruct : 객체의 생성이 일어난 직 후에 초기화를 수행하는 메서드에 부착한다.
@ManyToOne : 단방향 관계이고 FK관리에 있어서 가장 자연스럽다. @JoinColumn 어노테이션과 같이 쓰인다.
@JoinColumn : 엔티티 테이블에 FK 칼럼을 정의해준다.
자료형뒤에 ? 는 무슨 의미일까 ?
ex ) Long?
자료형 뒤에 ? 가 오는 것은 Kotlin에서 사용되는 문법이고 ?를 자료형 뒤에 붙이는 방식은 nullable 여부를 나타낸다. 예를 들면 var name: String? = null 이 코드는 해당 변수 name에 null 값이 올 수도 있다는 뜻이다.
<코드 분석>
- var type: SkillType = SkillType.valueOf(type) : SkillType.valueOf(type) 은 type이라는 문자열을 SkillType 열거형의 값으로 변환. 만약 type이 열거형에 없는 값이면 예외 발생
- var cookies: String? = httpServletRequest.cookies ?.map {"${it.name}:${it.value}"} ?.toString() : httpServletRequest에서 쿠키 정보를 가져오고, 쿠키 이름과 값을 "이름:값" 형식으로 변환하는 코드
- var referer: String? = httpServletRequest.getHeader("referer") : HTTP 요청에서 "Referer" 헤더 값을 가져온다. 이 코드는 사용자가 어떤 페이지에서 현재 페이지로 이동했는지 나타냄
- @OneToManyvar details: MutableList<ExperienceDetail> = mutableListOf() : JPA 관계를 나타내고, 엔티티 간의 일대다(One-to-Many) 관계를 나타냄
2. 미션
미션 1과 2를 제출하는건데, 미션1은 테이블 설계하기와 깃허브 리포지토리에 프로젝트 올리기이다.
미션 1 : https://github.com/HyupTech/LMS/commit/fa47b404d36b3ce418f16213e3bb30ca96b812ed
미션 2 : https://github.com/HyupTech/LMS/commit/0993897036a0e17e7a366031b950235edd5d506e
3. 회고
발자국을 작성하면서 나는 이제까지 강의를 보면서 공부를 했지만 다시 한번 이렇게 정리를 해가면서 강의를 보지 않았다. 왜냐하면 시간이 너무 아까웠고, 차라리 정리하는 시간에 강의를 하나 더 보자는 마인드였다. 하지만 발자국을 써보면서 왜 이렇게 좋은걸 내가 안했을까라는 후회가 들고, 이렇게 정리를 해가면서 했으면 아마 실력이 조금이라도 더 올랐지 않았나 라는 생각이 들었다. 앞으로 발자국도 쓰고, 내가 따로 공부하고 있는것도 정리해가면서 공부를 해야겠다.
3-1. 미션 회고
이번 미션에서 처음으로 ERD를 구성하고 어디에 PK를 주고 관계 설정을 어떻게 할지에 대한 고민이 많았던 것 같다. 현재 대학교 2-2에 재학중인데 데이터베이스 과목을 수강중인데 꽤 도움이 되었던 것 같고, 백엔드 개발자가 될려면 데이터베이스 공부도 놓지 말아야겠다고 생각이 들었다. 앞으로 더 많은 미션들이 기다리고 있는데 열심히 공부를 해야겠다!
'인프런 워밍업 클럽 > 발자국' 카테고리의 다른 글
[인프런 워밍업 클럽 2기 - BE] 3주차 발자국 (2) | 2024.10.20 |
---|---|
[인프런 워밍업 클럽 2기 - BE] 2주차 발자국 (0) | 2024.10.13 |