2-5까지 듣고 과제 시작…!
new project 생성
SQL 생성 소문자, 대문자 상관없음
Class가 속성(int, String)과 같은 자료형을 만들기 위해 커스텀 개념
왜 private final Map<Long, Post> postList = new HashMap<>();를 쓰는지?
new HashMap<>(); 의 개념?
HashMap은 제네릭 클래스로, 다양한 자료형의 키와 값 쌍을 저장HashMap 자체는 키(Key)에 대해서는 중복과 null을 허용하지만, 값(Value)에 대해서는 중복을 허용new HashMap<>();은 Java에서 HashMap 클래스의 인스턴스를 생성하는 코드포스트, 조회, 수정, 삭제 - 강의 참고
postman
Type 선택 - 주소 입력 - Body - raw - JSON 선택 - 코드 작성 - Send
POST
http://localhost:9090/api/post
{
"username" : "Jinhee",
"contetns" : "Jinhee가 작성한 내용"
}
post Type 선택 - 주소 입력 - Send
get Type 선택 - 주소 입력 - Send
GET
http://localhost:9090/api/posts
{
"id": 1,
"username": "Jinhee",
"contents": "Jinhee가 작성한 내용"
}
PUT
http://localhost:9090/api/post/{id}
{
"id": 2,
"username": "Jinhee2",
"contents": "Jinhee2가 작성한 내용"
}DELETE
http://localhost:9090/api/post/{id}
{
"id": 1,
"username": "Jinhee",
"contents": "Jinhee가 작성한 내용"
},
{
"id": 3,
"username": "Jinhee",
"contents": "Jinhee가 작성한 내용"
},
{
"id": 4,
"username": "Jinhee",
"contents": "Jinhee가 작성한 내용"
}{
"id": 1,
"contents": "Jinhee가 작성한 내용",
"author": "Jinhee",
"password": "pass123",
"title": "title"
}상세 조회
<힌트>
파라미터, URL
1, 2, 3이 있다면 2를 선택, map.getKey
id, title, contents, author, password 추가
password
더 만들어야 할 것
다시해보기&리팩토링
https://narup.tistory.com/70
https://googry.tistory.com/2
를 참고하고
drow.io 를 이용하여 다이어그램 만들어봄

참고
https://guiyomi.tistory.com/124
git reset HEAD~1 # 최근 1개의 커밋 삭제 + 변경된 파일은 unstaging 상태로 유지
git reset HEAD~n # 최근 n개의 커밋 삭제 + 변경된 파일은 unstaging 상태로 유지
git reset HEAD~1 : local - master 최근 커밋 목록이 1개 삭제됨
git reset HEAD~n : local - master 최근 커밋 목록이 n개 삭제됨
git reset을 사용하면 local - master의 커밋은 삭제되지만 git hub에 공유, push된 원격(remote)에서 적용이 되지 않음
커밋 삭제가 이루어진 local - master를 공유하면 새로운 원격이 생기고 적용 완료
그렇다면 이미 공유된 레포지토리의 커밋, 원격(Remote)에 있는 커밋은 삭제가 불가능한가?
원격 저장소에 있는 커밋을 삭제하는 것은 일반적으로 권장되지 않습니다. 커밋은 Git에서 변경 기록을 나타내는 중요한 요소이며, 원격 저장소는 여러 사용자가 함께 작업하고 협력하는 공간입니다.
일반적으로 원격 저장소의 커밋은 변경되면 안 되며, 이를 유지해야 합니다. 원격 저장소에서 커밋을 삭제하거나 변경하면 해당 변경 내역을 공유하는 다른 사용자들과의 동기화에 문제가 발생할 수 있습니다.
따라서, 원격 저장소에 올라간 커밋을 삭제하는 대신, 더 나은 접근 방법은 잘못된 커밋을 되돌리거나 수정하는 것입니다. 이를 위해 Git의 다양한 기능을 사용할 수 있습니다. 예를 들면, git revert를 사용하여 커밋을 되돌릴 수 있습니다. 이를 통해 잘못된 커밋을 취소하고 새로운 커밋을 생성할 수 있습니다.
그러나, 원격 저장소에 올라간 커밋을 삭제하고 싶은 특수한 상황이 있다면, 해당 원격 저장소에 대한 쓰기 권한이 있는 경우 원격 브랜치를 강제로 업데이트할 수 있습니다. 이는 주의해야 할 작업이며, 협업하는 팀원들과 충분한 협의 후에 수행해야 합니다.
따라서, 원격 저장소의 커밋을 삭제하는 것은 권장되지 않으며, 실수를 수정하거나 새로운 커밋을 생성하는 방법을 고려하는 것이 좋습니다.
remote에 있는 커밋을 터미널에서 reset으로 삭제하는 방법
터미널을 열고 원격 저장소가 연결된 로컬 저장소의 디렉토리로 이동합니다.
git log 명령을 사용하여 삭제할 커밋의 해시값(예: commit_hash)을 확인합니다. 이는 삭제할 커밋의 고유 식별자입니다.
git reset 명령을 사용하여 원격 저장소의 브랜치를 삭제할 커밋 이전으로 이동시킵니다. 다음은 예시 명령어입니다:
git reset --hard commit_hash
여기서 commit_hash는 삭제할 커밋의 해시값으로 대체해야 합니다.
변경된 내용을 원격 저장소에 강제로 푸시합니다. 다음은 예시 명령어입니다:
git push --force origin branch_name
여기서 branch_name은 원격 저장소에서 삭제한 커밋이 포함된 브랜치의 이름으로 대체해야 합니다. --force 옵션을 사용하여 강제로 푸시합니다.
git push --force origin branch_name 에서 origin branch_name의 의미
git push --force origin branch_name 명령은 로컬 저장소의 branch_name 브랜치의 변경 사항을 origin 원격 저장소에 푸시하는 명령입니다. --force 옵션은 변경 사항을 강제로 푸시함을 의미합니다.
git push --force origin branch_name
git push --force origin jh2origin 폴더에 branch_name 브랜치를 넣어준다는 거니까
origin 폴더에 master 에 branch_name 브랜치를 넣는다는 명령을 한다면?
- **git push --force origin master branch_name**
- **git push --force origin master jh2**
- local - master에 있는 내용이로 바뀌었다…?!
- jh2(커밋3)를 넣었는데 왜 로컬에 있는 master(커밋2)로 바뀐건지
결론
로컬에 있는 마스터를 오리진에 있는 마스터로 넣어봄 - 안됨(터미널 멈춤)
→ git push --force origin master
로컬에 있는 jh2를 오리진에 넣어봄 - 계정연동, jh2 브랜치 복사생성
→ git push --force origin jh2
로컬에 있는 jh2를 오리진의 마스터에 넣어봄 - 로컬에 있는 마스터 내용으로 변경됨
→ git push --force origin master jh2
의문점?
로컬에 있는 마스터와 jh2의 커밋 내용이 다릅니다
3번은 로컬의 jh2를 넣었는데 왜 로컬의 마스터 내용이 나올까요...



git push <원격저장소이름> <로컬브랜치이름>:<원격저장소브랜치이름> 여기서 <원격저장소이름>은 원격 저장소의 이름(별칭)을 나타내며, <로컬브랜치이름>은 로컬 브랜치의 이름, <원격저장소브랜치이름>은 원격 저장소에 푸시하려는 브랜치의 이름입니다. 예를 들어, 만약 로컬 브랜치 main을 origin 원격 저장소의 main 브랜치로 푸시하려면 다음과 같이 명령을 사용할 수 있습니다:git push origin main:main 위 명령은 로컬 main 브랜치를 origin 원격 저장소의 main 브랜치로 푸시합니다. 즉, 로컬의 main 브랜치의 변경 사항이 origin 원격 저장소의 main 브랜치로 병합됩니다. 원격 저장소의 이름과 브랜치의 순서를 올바르게 지정하여 git push 명령을 사용하시기 바랍니다.main을 origin 원격 저장소의 Like 브랜치로 푸시하려면 다음 명령을 사용하면 됩니다:git push origin main:Like터미널러 명령어를 주는 경우는 거의 없고 Git 메뉴에 대체적으로 있다고 합니다
ex) git push force 버튼이 있음