10.도커 학습 후 적용
'작성 시간'은 '생성 시기'와 다르다. 예를 들어, '생성 시기'가 2021-02-21이지만, '작성 시간'은 똑같은 날이 될 수도 있고 그 이전 날이 될 수도 있다.혈당일지 스키마 : 특정 혈당 일지에 대해 각 혈당 기록, 비고, 생성 시기, 갱성 시기,작성 시간은
기본 Long 클래스를 사용하는 것보다는 타입 안전하다. class 참조를 엔티티 생성자에서 확인하기 때문에 자신 class에 해당하는 id인지 컴파일 타임에 잡아낼 수 있다.단점1\. 사용 예시에도 알 수 있듯이, 코드가 더 길어진다.2\. 사용 예시에도 알 수 있듯
Writer 객체는 여러 개의 DiabetesDiary(혈당 일지) 객체를 리스트 형태로 보유한다. Writer→DiabetesDiary 로만 단방향 참조가 일어난다. DiabetesDiary에서 Writer를 참조할 필요가 없어보인다.DiabetesDiary 객체는
insert 문 하나만 있으면 되는데, 쓸데 없이 writer, diabetes_diary , 심지어 다른 diet 엔티티 모두에도 update 쿼리가 발생한다. 이렇게 되면 성능이 매우 저하된다.https://wwlee94.github.io/category/
프로젝트에서 사용한 검증 방식은 구글 구아바 라이브러리다.모델 레이어 내에서 엔티티 생성 또는 변경 시 checkArgument()를 호출해서 유효한지 검사한다.서비스 레이어에도 사용한다. 파라미터로 받는 id가 null이면 checkNotNull()에 의해서 예외가
엔티티 식별자를 "복합키"로 만들었고, 복합키 중 일부분을 "대리키" 로 "직접 할당"하는 방식으로 구현했다. 이 부분에서 주의할 점은 두 가지다.1.대리키를 할당하는 메서드 (getIdOfxxx)호출 시 다른 엔티티의 id를 호출할 수 있는 불상사가 일어날 수 있다.
\[Spring] 엔티티(Entity) 또는 도메인 객체(Domain Object)와 DTO를 분리해야 하는 이유 - MangKyu's Diary (tistory.com)Http PUT 메서드는 요청 페이로드를 사용해 새로운 데이터를 생성하거나, 대상 리소스를 나타내는
작성자 4명작성자 1명이 일지 3개 씀.각 일지에 식단 3개 작성식단 3개에 대해 음식 2개씩 작성POST RequestBody (각각 따로 전송해야 함.)POST http://localhost:8084/api/diary/diabetes-diaryRequest
GET http://localhost:8084/api/diary/owner/1/diabetes-diary/1/with/relations작성자의 일지 “하나”를 조회하는 메서드이다. 일지 “하나”를 조회할 때는 연관된 식단, 음식을 모두 가져오는 게 좋을 것
보안 상 이유로 해당 properties는 git ignore.이메일 타입 변환이랑 비밀 번호 추가 필요.
@EnableWebSecurity에 의해 스프링 시큐리티 필터가 스프링 필터 체인에 등록된다.BCryptPasswordEncoder는 String으로 되어있는 패스워드를 암호화해준다. 이를 빈으로 등록했기 때문에 스프링 컨테이너 안에서 Autowired나 생성자 주입
로그인을 하려면 상태를 관리할 수 있는 세션이 필요하다. 스프링 시큐리티의 경우 ‘Secruity Session’을 제공한다.이 시큐리티 세션은 Security Context Holder 내에서 관리된다. 관계는 다음과 같다.가장 먼저, configure()메서드에
구글 api console 개발자 홈페이지로 접속한다. 그 후 다음 버튼을 누른다.누르면 다음 창이 나온다. 새 프로젝트를 누른다.프로젝트 이름을 작성하고 만들기를 누른다.OAuth 동의 화면 클릭. 그리고 외부로 설정한 다음 만들기 클릭.애플리케이션 이름과 이메일 작
코드 받기 (인증) 액세스 토큰 받기 (권한) 사용자 프로필(이메일,이름,아이디,전화번호 까지만) 정보 가져옴그 정보를 토대로 회원 가입 자동 진행도 함. 추가적인 정보(집 주소 등)가 필요하다면 추가적인 회원가입 절차가 필요함.DefaultOAuth2UserServi
스프링 시큐리티는 인증된 정보를 Authentication으로 감싸서 Security Context Holder에 보관해 놓는다.아래와 같이 메서드 파라미터로 Authentication을 받거나, @AuthenticationPrincipal 을 부착한UserDetail
provider는 OAuth 제공자이고, providerId는 OAuth 제공자가 주는 id이다.회원가입 시에 엔티티 id 값은 중요하지 않기 때문에 제외한다.DefaultOAuth2UserService를 상속한 서비스 클래스의 loadUser()메서드에 회원 가입 로
깃허브는 google, facebook과 다르게 이메일을 “반드시” 제공하지는 않는다. 위의 깃허브 프로필을 보면, 사용자가 이메일 제공 거부로 설정해놨을 경우, oauth 요청을 해도 email이 null로 온다. 모든 사용자가 이메일 제공 동의를 했을리도 없는데,
어떤 사용자가 OAuth 로그인을 n개 하는데, email이 전부 같다고 하자.만약 email만 체크한다면, 중복으로 처리된다. 이를 막기 위해 다음과 같이 작성했다.일반 회원 가입 시에는 provider가 존재하지 않기 때문에 null이다. 따라서 같은 email이
로그인 인증 작업을 마치게 되면, OAuth 로그인의 경우DefaultOAuth2UserService 구현체의 loadUser(OAuth2UserRequest oAuth2UserRequest) 가 호출된다. 일반 로그인의 경우 UserDetailsService 구현체의
기존 코드는 다음과 같다. 기존 컨트롤러 코드의 문제점은 작성자의 “기본키”를 URL이나 DTO에서 얻어내야 한다는 점이다.DTO 코드를 뜯어보면 다음과 같다.테스트코드에서도 알 수 있듯이, DTO의 작성자 id를 넣어준다. 하지만 스프링 시큐리티에선 세션 내에 이미
테스트할 컨트롤러 메서드는 다음과 같다.파라미터에 @AuthenticationPrincipal 이 부착되어 있기 때문에 현재 세션에 담긴 사용자 정보를 얻을 수 있다. 해당 사용자 정보 중, PK값은 일지, 식단, 음식 저장에 필수적으로 들어간다. (복합키 식별 관계로
혈당 일지 폼의 경우, '값'을 읽어 온다. 식사 혈당 폼의 경우, '값'을 읽어 온다. '음식 추가' 버튼을 클릭 시, 음식용 캐시에 추가한다. '음식 삭제' 버튼 을 클릭 시, 음식용 캐시에서 빼낸다.'저장하기' 버튼을 클릭 시, PostManipulator 객체의
수정 / 삭제 용 작성 폼 조회 요청서버가 뷰 반환처음 뷰 반환 됬을 때, 원본 캐시 생성사용자가 음식 수정 및 삭제를 할 경우 새로운 캐시에 반영.실제로 수정 버튼을 누를 때, 원본 캐시와 새로운 캐시 비교.Dirty check 해서 변경된 부분만 dto로 날림.수정
브라우저에서 달력의 '<' , '>' , '<<' , '>>' 버튼을 클릭한다. 해당 이벤트가 발생할 경우 findDiariesBetweenTime()이 호출된다.현재 화면에 출력된 달력의 날짜 정보를 읽어온 후, ajax로 호출한다.컨트롤러 -> 서비
메이븐 빌드 후 jar 파일 실행할 때 main 메소드를 찾을 수 없다는 에러가 나올 경우가 있다.그러면 pom.xml에 다음 플러그인을 추가해야 한다.그리고 maven package 시 테스트 스킵하고 싶으면 다음 플러그인을 추가하면 된다.
vim depoly.sh 로 만든 배포 스크립트이다../mvnw clean install -DskipTests 는 테스트 스킵 설치를 뜻한다.cp $REPOSITORY/$PROJECT_NAME/target/\*.jar $REPOSITORY/ 에서 target 디렉토리는
mvn package로 만든 jar 파일을 실행 시, /loginForm 과 같은 url 을 매핑하지 못하고 404 에러가 나온다. ide에선 분명히 잘 되었지만, jar 파일에서는 제대로 안되는 것이다.원인mustache 를 classpath에서 못 찾은 것이다.해결
배포 하고 나서는 localhost 로만 되있기 때문에, aws에 배포해놔도 oauth 로그인을 할 수 없다.따라서 url을 추가해야 한다.페이스북의 경우https 만 허용한다.https://imweb.me/faq?mode=view&category=30&ca
참고https://dev.classmethod.jp/articles/try-registering-the-aws-route53-domain/참고https://dev.classmethod.jp/articles/route53-acm-free-domain-h
참고로 nginx 적용은 실패
작성자는 OAuth 로그인을 할 수 있어야 한다.작성자는 인가 권한에 맞게 로그인 할 수 있어야 한다.음식은 "수량"을 기재할 수 있어야 한다.음식 수량은 "단위"가 필요하다.1.과 2.는 시큐리티를 적용할 때 반영되었다. 1.에 해당하는 속성은 작성자의 provide
참고 서적인 따라하며 배우는 도커와 CI 환경에서 사용하는 Travis CI를사용할 수가 없다. 왜냐하면 무료 trial plan이 만료되었기 때문이다.그래서 포트폴리오에 이미 적용한 GitHub Actions를 활용하여 aws eb에 배포해 보았다.임시 repo인 도
위 다이어그램에 도커를 적용하고 싶었다. github actions -> aws elastic beanstalk로 배포github actions -> docker hub에 push -> ec2에서 해당 image pull서적을 활용하여 도커를 공부했지만, 위 상황에 응
혈당 일지를 post 또는 update 할 때, 음식 엔티티 insert가 너무 많이 발생한다. 이를 최적화할 수 있는지 방안을 연구할 필요가 있다.https://joojimin.tistory.com/58https://jaehun2841.github.
하나의 컨트롤러 메서드 호출에 대해서 여러 번의 트랜잭션이 생긴다.로그를 분석해보면, 최소화할 수 있는 select 쿼리가 많이 있다.
GitHub Actions에서 빌드할 때 외부 properties가 없어서 테스트가 실패한다.외부 properties (예를 들어 email, oauth, database 관련 properties)는 보안상 GitHub에 푸시해선 안된다.그런데 CI 툴은 디렉토리 내에
AWS ACM이랑 ELB를 이용하여 HTTPS를 적용했었다. 하지만 8084 포트에만 적용되는 것이 문제다. 그 이유는 대상 그룹에 포트가 8084로만 되있었기 때문이다.그런데 Nginx + SSL + ELB 관련 예제를 보니 대상 포트가 80으로 되있었다. 다음과 같
https://velog.io/@dasd412/1.%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B0%8F-%EA%B5%AC%EC%A1%B0-%EC%84%A4%EA%B3%84-1N-%EA%B4%80%EA%B3%84-%EC%97%94%ED%8B%B0%
ec2 인스턴스 중지하고 나서 며칠이 지난 후, 다시 기동시켰다.그 이후 putty, 파일지라, rds 연결이 모두 안된다.elastic ip 문제인가 했더니, 이미 elastic ip를 설정했기 때문에 인스턴스 ip 문제가 아니다. (elastic ip를 적용하면,
신입 포트폴리오가 이제 필요 없어져서 aws를 해지한다.비용을 확인해보니, route 53이 매달 0.5 달러씩 청구되었다.https://tech4u.tistory.com/60