토이프로젝트

프로젝트를 하다보면 application에 중요한 정보가 들어갈 때가 많다. 예를 들자면 oauth 로그인 정보나 다른 aws access 정보가 있다. 만약 이게 배포가 된다면 엄청난 보안사고가 일어날 수 있다. 이것을 예방하기위해 제일 쉬운 방법은 gitgnore에 올려 그냥 push를 안하면 된다. 그러면 배포할때 따로 관리를 해줘야 하므로 귀찮을 수가 있다. 이번에 선택한 방법은 submodule을 사용해 application을 관리하는 것이다. Git Submodules Git Submodules란 저장소 안에 다른 저장소를 원하는 디렉토리를 복제하는 기능이다. (생활 코딩 : 저장소안에 저장소 - git submodules youtube) 이 유튜브를 보면 자세하게 설명해준다. Git subm..
지금까지 EC2와 RDS는 많이 사용을 해봐서 EC2와 RDS는 기존에 사용하던 것을 그대로 사용했다. 이제 내가 만든 spring파일을 EC2에 배포해볼려고 한다. Git Clone으로 파일 가져오기 git에 파일을 올려놓고 관리하면 좋은점이 바로 clone이다. 이런 EC2 서버나 다른 곳에 한 번에 복사해서 사용할 수가 있다. 깃허브 페이지에서 https 주소를 복사한다. git clone 주소 를 하면 내가 원하는 폴더에 자동으로 복사가 된다. 이제 지금까지 내가 해왔던 test를 한번 돌려보자!! 배포 스크립트 만들기 저번 방학때 배포를 하기 위해서 맨날 똑같은 코드를 쳤던 기억이 있다. git에서 pull을 받고 gradle을 빌드하고 실행하고 있던 파일이 있으면 끄고 재실행 이것을 매번 반복..
이번에는 네이버 소셜 로그인을 구현해 볼 것이다. 네이버 API 등록 네이버 디벨로퍼의 openApi로 이동한다. 거기서 네이버 서비스를 등록해야 한다. 구글 콘솔에서 했던 것과 굉장히 비슷하다. 서비스 URL은 지금 로컬에서 하고 있기 때문에 http://localhost:8080/을 선택했다. Callback URL은 http://localhost:8080/login/oauth2/code/naver를 선택했다. application-oauth.properties에 등록하기 아쉽게도 네이버는 스프링 시큐리티에서 공식 지원을 하지 않는다고 한다. 그러므로 CommonOAuth2Provider에서 해주던 값들도 전부 수동으로 입력해야 한다ㅜㅜㅜㅜ #registration spring.security.oau..
지금 이 프로젝트는 애플리케이션을 재실행하면 로그인이 풀린다. 그 이유는 세션이 내장 톰켓의 메모리에 저장되기 때문이다. 기본적으로 세션을 실행하는 WAS의 메모리에서 저장되고 호출된다. 메모리에 저장되다 보니 내장 톰켓처럼 애플리케이션 실행 시 실행 되는 구조에선 항상 초기화가 됩니다. 톰캣이 재시작 되면서 세션도 초기화 되는 것이다. 세션 동기화 만약 2대 이상의 서버에서 서비스하고 있다면 톰캣마다 세션 동기화 설정을 해야한다. 톰캣 세션을 사용한다. 일반적으로 별다른 설정을 하지 않을 때 기본적으로 선택되는 방식이다. 이렇게 될 경우 톰캣에 세션이 저장되기 때문에 2대 이상의 WAS가 구동되는 환경에서는 톰켓들 간의 세션 공유를 위한 추가 설정이 필요하다. MySQL과 같은 데이터베이스를 세션 저장..
지금까지 짠 코드를 확인하면 같은 코드가 반복되는 부분이 존재한다. 이렇게 같은 코드가 반복하면 이후에 수적이 필요할 때 모든 부분을 하나씩 찾아가며 수정해야 하므로 유지보수성이 떨어진다. 바로 세션값을 가져오는 부분이 개선할만한 가치가 있다. SessionUser user = (SessionUser) httpSession.getAttribute("user"); 이제 이 부분을 메소드 인자로 세션값을 바로 받을 수 있게 만들 것이다. @LoginUser 만들기 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface LoginUser { } @Target(ElementType.PARAMETER) 이 어노테이션이..
스프링 시큐리티는 막강한 인증과 인가 기능을 가진 프레임워크이다. 스프링은 인터셉터, 필터 기반의 보안 기능을 구현하는 것보다 스프링 시큐리티를 통해 구현하는 것을 적극 권장하고 있다. 이번 프로젝트에서는 프로젝트 자체 로그인을 구현하는 것이 아닌 OAuth2.0을 이용해 로그인을 구현해 볼 것이다. 이 책에서는 스프링 부트 2.0을 기준으로 구현했다. 하지만 나는 스프링 부트 3.0을 기준으로 구현할려고 한다. 스프링 부트 1.5 VS 스프링 부트 2.0 OAuth2 연동 방법이 1.5에 비해 2.0에서 많이 달라졌다고 한다. 내가 설계한 프로젝트의 스프링 부트 버전은 3.0이다. 2.0과 OAuth2 에서는 크게 변경되지는 않았지만 SecurityConfig를 다르는 부분이 달라졌다. 만약 스프링 부..
게시글 수정 화면 만들기 게시글 수정 API는 저번에 이미 만들었다. @Transactional public Long update(Long id, PostsUpdateRequestDto requestDto){ Posts posts = postsRepository.findById(id) .orElseThrow(() -> new IllegalArgumentException("해당 게시글이 없습니다. id="+ id)); posts.update(requestDto.getTitle(), requestDto.getContent()); return id; } 그러므로 API 요청만 잘 하면된다. posts-update.mustache {{>layout/header}} 게시글 수정 글 번호 제목 작성자 내용 {{po..
게시글 등록 화면 만들기 이 책은 오픈소스인 부트스트랩을 이용하여 화면을 만들었다. 부트스트랩, 제이쿼리 등 프론트엔드 라이브러리를 사용할 수 있는 방법은 크게 2가지가 있다. 외부 CDN을 사용하기 직접 라이브러리를 받아서 사용하기 이 책은 외부 CDN을 사용한다. 이 프로젝트는 직접 내려받아 사용할 필요도 없고, 사용 방법도 HTML/JSP/Mustache에 코드만 한 줄 추가하면 되니 굉장히 간단하다. 실제 서비스에서는 외부 CDN 방법을 잘 사용하지 않는다. 외부 서비스에 의존하게 돼버려서, CDN을 서비스하는 곳에 문제가 생기면 덩달아 같이 문제가 생기기 때문이다. 부트스트랩, 제이쿼리 추가하기 index.mustache에 추가해줘야 한다. 레이아웃 방식으로 추가한다. 레이아웃 방식이란 공통 영..
Wooooong!!
'토이프로젝트' 카테고리의 글 목록 (2 Page)