2021-06-07

0607 GitHub로 협업하기

1.  

브랜치 생성

settings 에서

collaborator에 추가 --> 메일이 날라오게 됨. 확인


2. 

본인이 원하는 폴더안으로 들어가서 마우스 오른쪽 클릭 -> GITBASH

git clone 주소(컨트롤v 먹지않으니 마우스오른쪽클릭 -> paste)



3.  STS 인경우 ) 왼쪽상단메뉴바에서

file -> open projects from filesystem






4. 작업완료후

5. 

git checkout -b 브랜치이름아무거나

( 브랜치를 생성하는 명령어입니다.)


6. 

git add .

git commit -m"메시지내용"

(모든 파일을 로컬 깃에 반영)


7. 

git push 브랜치이름


8. 깃 GUI화면에서

compare & pull request 라는 초록색 버튼 보내기


--------------------------------------------------------merge가 승인되면 해당 브랜치는 사라집니다.


이후-> 


git checkout master

git pull origin master



git checkout -b 브랜치이름

반복...

0607 깃허브 fork , clone하기

 

1. 오른쪽 fork버튼 클릭



2. 본인 레포지토리로 이동 후 URL주소 복사


3. 원하는 본인의 로컬 PC에 프로젝트 폴더생성

4. 해당 폴더로 들어온 후 마우스 오른쪽 클릭 -> GIT BASH HERE 선택



6. git init



7. git clone 복사한URL
(참고: bash화면에서는 Ctrl V를 지원하지 않으니, 마우스 오른쪽 클릭 -> paste하시길 바랍니다.)



8. 파일이 성공적으로 로컬에 복사된 것을 확인할 수 있습니다.

9. STS실행



maven ->existing~~~어쩌구 선택

2021-06-06

0606 지속적인 개선



 


피드백을 받은 후 개선한 점

1. 마이바티스&JPA를 같이 사용하기

1) JpaTransactionManager로 트랜잭션 한번에 관리
2) Xml환경 & 자바코드 환경의 장점을 둘다 활용하여 다양한 방식의 DB접근이 가능하도록 설계
3) JPA가 쿼리방언을 자동적으로 조정해주고, CRUD기본 쿼리를 자동적으로 제공해준다는 것은 커다란 장점임. but.. DB는 항상 업데이트되며,(쿼리 방언이 바뀐다든지) JPA라는 오픈소스에만 의존해서는 요구사항에 제때제때 응답할 수 없게 됨!! 여러 상황에 대처할 수 있도록 만들어야함! 


2. 보안강화 
1) modify 게시글 할 때 접근제어의 강화
2) View단에서의 접근 방지& 
3) backend에서는 @PreAuthoried로 @PostMapping 방지 & 
4) DB에서 한번 더 해당 게시글 조회한 후 username과 비교, 설령 username을 조작하더라도 수정이 불가능하도록 한번 더 방지!!

----------------그외, 피드백을 듣고 조사한 사항
오류 메시지를 개발자, 사용자에게 분리해서 보여줄수있을까? -> 스프링의 application-properties파일을 이용해서 환경변수를 조절할 수 있을거같은데!!

0606 스터디

 1. 상속이란 - 부모의 기능을 이용하는 것이지, 멤버변수를 재사용하려고 생각하면 파급효과가 커진다. 상속대신 Has a를 이용해서 기능을 사용하는 방식을 생각해보자.

2. 레인보우 테이블? https://badwood.tistory.com/121

3. @getMapping 충돌시 : java.lang.IllegalStateException: Ambiguous mapping found.

라는 오류가 뜨면서 서버 실행 안됨. uri중복방지 --> 어떻게 해결하지??

4. 도커란? 경량화된 어플리케이션 가상화 기술.

5. 특정시간에 따라 안내페이지로 이동시키기 / 개발중인 경우 안내페이지로 이동시키기

: 스프링 @Profile어노테이션 활용 -> 환경변수(export로 전달하거나) . 

https://2ham-s.tistory.com/259 <<런타임환경을 조절. develop환경인지, 배포환경인지- 조절가능. 올리는 Bean을 다르게 만들 수 있다. 

아니면 - @ConfigurationProperties를 이용해서, 매개변수를 다르게 전달하거나. 


6. 프레임워크란? 절반만 만들어진 소프트웨어, 그 자체로 실행 가능하다. 나머지 절반을 채우는 것은 개발자의 몫! ( 라이브러리와는 다르다, 실행불가능)

7. 접근제어 정책을 뷰~컨트롤러 바로 연결하기(중복코드 제거)? 

2021-06-05

0605 아마존 ec2 ssh로 접속하기

 1. 

공개키가 있는 폴더로 이동 -> ssh -i "키 이름" 계정이름(기본적으로, ubuntu) @ 퍼블릭 IP혹은 DNS 

정확히 입력했는데도 계속 permission denied(public key)오류가 나서 왜일까? 했는데 , cmd창을 관리자 권한으로 실행하지 않아서였다. 속성 - 고급 - 보안 탭에서 '항상 관리자권한으로 실행하기' 로 수정, 

-> 접속 잘 된다!!

2. TODO

- jdk 설치

- 자바 symbolic link 설정 & path설정

- source명령어로 실행반영

- git설치 (이미 설치되어 있음) 

- git clone 주소 : 내가 올린 코드들이 복사된다. 

- 컴파일 & 빌드진행 ( ./mvnw clean package 혹은 ./gradlew )

- jar 파일 실행 (java -D옵션 -jar) : 서버를 올린다, & 옵션을 붙여서 독립적으로 뜨도록하기

- curl localhost:8080으로 접속해보기(로컬) 

- 8080으로 해당 dns 혹은 ip로 접속해보기(원격)


3. 

java -version과

javac -version으로 설치되어있는지 확인하면- 우분투가 똑똑해서.. 알아서 다운로드할 파일을 제시해준다. 다운로드


자바 PATH설정중(vi편집기로 쓰고있었다) 권한 없음 에러

https://keepdev.tistory.com/3

이렇게 해결!!

https://philip1994.tistory.com/71

sudo reboot로 리부팅하고 ssh로 다시 접속->자바 패스가 잘 설치된 것을 확인할 수 있다!!




4. git clone uri

하고 -> pom.xml있는 디렉토리로 이동 -> ./mvnw하는데도 계속 퍼미션 에러

1) root로 접속했는데도(sudo su ) 퍼미션 에러떠서 검색검색

2)https://www.slipp.net/questions/468 <<해당링크로 해결!! ./mvnw 명령어자체의 권한을 재설정하였고 ./mvnw clean package시 잘 작동되었다!

 

빌드 success확인!


5. cd target => jar파일이 생성된 것을 확인 할 수 있다 
java -jar (탭누르면 해당 jar파일 이름 자동완성) 
& 옵션으로 서버를 띄우면!!



우와!!! 이렇게 원격에서 접속할 수 있다!!!!
놀라움.....멋지다....
서버...즐거버....히히


curl명령어를 이용하면, local에서도 확인해볼 수 있다. 

2021-06-04

0604 m:n 관계의 데이터 처리하기

1. 다대다 관계의 경우, 데이터베이스 테이블에 데이터가 수평적으로 늘어나게 된다.

그러나 컬럼 수는 한정적이므로, 데이터에 따라 컬럼수가 뒤죽박죽이 되는것은 불가능...

따라서 수평적으로 데이터가 늘어나는 것이 아니라, 수직적으로 늘어나게끔 설계해야 한다.

2. 그러기 위해서 필요한 것이 맵핑 테이블이며, 다대다 관계를 가운데에서 해소해주는 역할을 한다. 

- 회원(주어)은 영화리뷰를(목적어) 작성한다(서술어)

 이 관계에서, 명사테이블 - 회원/ 영화/ 은 다대다관계가 되므로- 각각 독립적인 테이블로 먼저 설계하고,

서술어부분의 맵핑테이블을 만든다. 

3. 따라서, 맵핑테이블은 각 주어테이블의 PK를 FK로서 보유한다.



위와 같이 랜덤으로 영화/회원을 가져온후 랜덤으로 grade(평점, 1점에서~5점까지)를 등록하는 테스트코드를 작성한다.



데이터가 랜덤으로 형성되어 잘 들어가 있음을 확인해볼 수 있다!

2021-06-03

0603 JPA와 MyBatis를 함께 사용할 때의 트랜잭션 고민 해결!!

서로 다른 ORM을 하나의 어플리케이션 안에서 사용할 때- 트랜잭션 처리는 어떻게 되는가? 에 대한 고민이 있었다 . 하나만 사용하면 알아서 datasource에서 읽어서 트랜잭션 처리를 해줄터이지만 - 혹시 이기종의 ORM을 사용하면 각자의 transactionManager를 가져오게 되는걸까?!! 하는 걱정....


https://docs.spring.io/spring-framework/docs/3.0.x/javadoc-api/org/springframework/orm/jpa/JpaTransactionManager.html 

JPA를 사용할 때, JpaTransactionManager는 이기종 간의 ORM의 트랜잭션을 함께 처리해주는 역할을 한다고 한다.

하지만 그렇다면... 현재 내 어플리케이션 안에 autoConfigure된 transactionManager의 객체가 과연 JpaTransactionManager인가? 하는 의문과 걱정... 

그래서, 직접 모든 빈을 불러왔다!!!




여기에서-- object로 만들어진 transactionManager가 JpaTransactionManager임을 확인할 수 있다!!! 속시원하다!! 헤헤 걱정 해결~~!!

0328 fdisk, mkfs, mount, fstab

 1. 하드디스크를 붙인다. 2. fdisk -l로 하드디스크를 확인한다.  - interactiive한 커맨드모드 사용하여 (m) 붙인 하드디스크의 파티셔닝을 한다.  - 마지막에 w를 해야 실제로 반영이 된다.  3. mkfs를 하여 어떤 파일시스...