Git 명령어 정리
[Git] 명령어(2) - remote, push, clone, pull
-
git remote
- local repository에 연결된 remote repository를 확인하는 명령어
- git remote add {별칭} {원격저장소 URL 주소}
- 별칭은 주로 origin
-
git push
- git push {원격 저장소명} {원격 브랜치명}
- 아래의 두 명령어는 같은 일을 한다.
- git push -u {원격 저장소명} {로컬 브랜치명}
- git push - -set-upstream {원격 저장소명} {로컬 브랜치명}
- 브랜치를 추적하도록 하는 것
- git push - -delete {원격 브랜치명}
- remote repository에 있는 브랜치 삭제
-
원격 저장소에서 파일 가져오기
- git clone
- git clone {원격 저장소 URL}
- git clone -b {브랜치명} {원격 저장소 URL}
- git clone 과 git pull 비교
- git clone은 Github의 모든 파일을 가져오기만 한다.
- git pull은 local repository와 비교하여 병합하고, local repository에 저장(add)까지 수행
- git pull = git fetch + git merge
- git fetch는 local에 연결된 remote repository의 브랜치 목록과 그 파일 내용을 최신으로 업데이트한다.
- local과 remote의 싱크를 맞추는 새로고침 역할
- git merge는 두개의 branch를 병합하는 명령어
-
rebase
https://victorydntmd.tistory.com/279 → 참고하기
- rebase는 merge처럼 병합하는 작업이지만, 커밋 이력을 다룰 수 있다.
- merge보다 히스토리(log)가 깔끔해진다.
- git pull - -rebase {원격 저장소 별명} {브랜치명}
- 위의 명령어는 git fetch + git rebase 와 같다.
step2에서 step1을 merge했는데 터미널에서는 오류가뜨고 인텔리제이에서는 step1의 변경된 코드가 잘 적용이 되었다.
그냥 step2에서 add하고 commit 을 해주었다. (-m "Merge brance 'step1-getting-started' ")
터미널에서 왜 에러가 난것일까?
자바 테스트 코드 짜기(루카스) 연습
new 프로젝트로 Gradle 선택해서 새로운 프로젝트 생성함
문제점 왜 @Before와 @After에 해당되는 내용은 안나오지?
루카스내용을 실습했는데 테스트 실행 결과에서 @Before와 @After에 해당되는 메소드안의 출력문은 왜 출력이 안되는 걸까.
-> 어노테이션 더 학습해보기
메소드에서 기능 분리하는 법
분리하고 싶은 코드 드래그 + 우클릭 → Refactor → Extract Method
빌드 도구란?
[Spring] Maven? 빌드 도구란?
빌드란?
소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 일련의 과정
컴파일, 테스팅, 배포 등 모든 과정의 집합
빌드도구는 이러한 빌드 과정을 자동으로 수행해준다.
Maven, Gradle 등이 있음
Gradle
Maven과 Gradle의 차이
- 빌드 스크립트를 통해 사용할 어플리케이션의 버전, 라이브러리 등의 항목을 설정할 수 있다.
- 라이브러리 관리 : 설정되니 서버를 통하여 라이브러리를 다운로드 받아 모두 동일한 의존성을 가진 환경을 수정할 수 있다. 자신이 추가한 라이브러리도 레파지토리 서버에 올릴 수 있다.
- 프로젝트 관리 : 모든 프로젝트가 일관된 디렉토리 구조를 가지고 빌드 프로세스를 유지하도록 도와준다.
- 단위 테스트 시 의존성 관리 : junit 등을 사용하기 위해서 명시한다.
TDD
아래 영상을 보고 TDD란 무엇인가 학습했다.
내가 TDD에 집착하는 이유는?
나는 왜 TDD에 집착하는가?
-
TDD : Test Driven Development
-
라이브 코딩 하시는 것을 보니, 테스트 코드를 구현하고, 프로덕션 코드를 구현한다.
- 프로덕션 코드를 리팩토링하면서 테스트 코드를 실행해본다.
-
메인메소드에서만 test해보았는데 TDD 방식이 훨씬 효율적인 것을 알았다.
-
진정한 리팩토링을 위해서는 Test코드가 필요하다.
-
Test 코드가 뒷받침 되어야 코드를 자유롭게 수정해볼 수 있다.
-
요구사항 추가, 변경으로 인해 코드를 수정할 때가 많은데 이 경우 테스트 코드가 있으면 불안감이 줄어든다.
-
처음부터 완벽한 설계를 하는 것이 아니라 점진적으로 개선한다.
-
main method 테스트 문제점을 해결하기 위해 나온 도구 : JUnit
JUnit5
- 자바 개발자가 가장 많이 사용하는 테스팅 프레임워크
- 어노테이션을 활용한 단위 테스트
- @BeforeEach, @Test, @AfterEach
- Assert클래스의 static 메소드가 있지만 더 편리한 AssertJ를 많이 사용한다
- JUnit5 = JUnit 플랫폼 + JUnit Jupiter + JUnit 빈티지
- JUnit 플랫폼 : 테스트를 실행해주는 런처 제공, TestEngine API 제공
- JUnit 플랫폼과 IDE를 통해서 테스트 코드를 실행
- JUnit Jupiter : Test Engine API 구현체로 JUnit5를 제공
- JUnit 빈티지 : JUnit3과 JUnit4를 가능하게 해주는 테스트 엔진
JUnit과 AssertJ 함께 사용하기
사이트 내용 간략히 정리함, 필요시에 들어가서 보기
AssertJ / Fluent assertions for java
-
Get AssertJ Core assertions
-
Add AssertJ methods static import
- import static org.assertj.core.api.Assertions.*;
-
Use code comletion
자바의 정석 9장 java.lang 패키지
- java.lang 패키지는 자바프로그래밍에 가장 기본이 되는 클래스들을 포함하고 있다.
- import문 없이 사용 가능
- String 클래스나 System 클래스
hashCode() (453p)
객체의 지문
-
객체의 주소를 int로 변환해서 반환
-
클래스의 인스턴스변수 값으로 객체의 같고 다름을 판단할 때 equals()뿐만 아니라 hashCode()도 오버라이딩 해주어야함
-
HashMap과 HashSet과 같은 클래스는 해싱 기법을 사용한다.
→ HashMap 과 HashSet에 저장할 객체라면 반드시 equals()와 hashCode() 둘 다 오버라이딩 해야함
String 클래스 (465p)
- 변경 불가능한 immutable 클래스
- 문자열간의 결합이나 추출 등 문자열을 다루는 작업이 많이 필요한 경우에는 String클래스 보다는 StringBuffer 클래스를 사용하는 것이 더 좋다.
- StringBuffer 인스턴스에 저장된 문자열은 변경 가능
문자열의 비교
문자열 리터럴
- 같은 내용의 문자열 리터럴은 한번만 저장됨
- 상수 저장소(constant pool)에 저장됨
오늘 한일
- JUnit이란? JUnit과 assertJ으로 테스트코드 작성하기, 빌드 툴이란? TDD의 장점, 효과
- git remote, push, pull, rebase, fetch, merge
- rebase는 아직도 잘 모르겠다. 직접 명령어를 사용해봐야 이해할듯
- 자바의 정석 9장 String
- 매일 코드 작성하다가 main 메소드에서만 테스트 해보았는데 드디어 Test code를 작성하는 법을 알게 되었다. 어노테이션별로 기능은 더 공부해야겠다.
- git merge 하다가 터미널에서는 에러가 떴는데 인텔리제이에서는 원하는 브랜치의 코드가 잘 반영이 되어있었다. 뭐지..