- 2021.01.05 AWS 서비스 종료
- "햄의 기록"은 취업 준비 기간을 기록한 개인 사이트입니다.
왜 ? 이렇게 코드를 작성했는지, 이 기술을 선택했는지는 여기에서 확인 가능합니다.
- ✨ 이동욱님의 「스프링 부트와 aws로 혼자 구현하는 웹 서비스」책의 실습을 바탕으로 구현했습니다.
- 실습이 완료된 사이트에 기능을 추가하여 구현했습니다.
- 구글과 네이버(개발서버에서만 가능)를 통해 로그인 가능하며 로그인 시에만 열람할 수 있습니다.
- USER로 인증된 사용자만 게시물을 등록할 수 있습니다.
- AWS EC2에 배포했습니다.
- Travis CI, AWS S3, AWS CodeDeploy를 이용하여 배포를 자동화 했습니다.
- SSL인증서를 추가하여 HTTP의 취약한 보안을 개선했습니다.
1. 처음 사용해본 기술이 많아서 쉽지 않았지만 배우고 직접 사용해본 것이 즐거웠습니다.
2. 작은 퍼포먼스만 내도 괜찮은 서비스인데 spring framework로 개발하니 생각했던 것보다 시간이 오래 걸려 아쉽습니다.
- Spring boot 2.1.7. (Gradle)
- Spring JPA
- Spring OAuth2
- MariaDB
- AWS
- JavaScript(Jquery)
- mustache template
- css
- bootstrap
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.headers().frameOptions().disable()
.and()
.authorizeRequests() // URL별 관리를 설정하는 옵션의 시작점
.antMatchers( "/css/**",
"/images/**", "/js/**", "/h2-console/**",
"/profile", "/loginView").permitAll() // permitAll():전체열람권한
// get요청은 로그인한 사용자만 허용
.antMatchers(HttpMethod.GET).authenticated()
// post요청은 인증된 사용자만 허용
.antMatchers(HttpMethod.POST).hasRole(Role.USER.name())
.and()
// 로그인 페이지 커스터마이즈
.formLogin()
.loginPage("/loginView").permitAll()
.and()
// ... 생략
}
├─main
│ ├─java
│ │ └─webservice
│ │ └─springboot2
│ │ └─test
│ │ │ Application.java
│ │ │
│ │ ├─config
│ │ │ │ JpaConfig.java
│ │ │ │ WebConfig.java
│ │ │ │
│ │ │ └─auth
│ │ │ │ CustomOAuth2UserService.java
│ │ │ │ LoginUser.java
│ │ │ │ LoginUserArgumentResolver.java
│ │ │ │ SecurityConfig.java
│ │ │ │ SessionUser.java
│ │ │ │
│ │ │ └─dto
│ │ │ OAuthAttributes.java
│ │ │
│ │ ├─domain
│ │ │ │ BaseTimeEntity.java
│ │ │ │
│ │ │ ├─plansGoles
│ │ │ │ Goles.java
│ │ │ │ GolesRepository.java
│ │ │ │ Plans.java
│ │ │ │ PlansRepository.java
│ │ │ │
│ │ │ ├─posts
│ │ │ │ Posts.java
│ │ │ │ PostsRepository.java
│ │ │ │
│ │ │ ├─records
│ │ │ │ Records.java
│ │ │ │ RecordsRepository.java
│ │ │ │
│ │ │ ├─recruits
│ │ │ │ Recruits.java
│ │ │ │
│ │ │ ├─underpins
│ │ │ │ Underpins.java
│ │ │ │ UnderpinsRepository.java
│ │ │ │
│ │ │ └─user
│ │ │ Role.java
│ │ │ User.java
│ │ │ UserRepository.java
│ │ │
│ │ ├─service
│ │ │ CrawlingService.java
│ │ │ GolesService.java
│ │ │ PlansService.java
│ │ │ PostsService.java
│ │ │ RecordsService.java
│ │ │ RecruitsService.java
│ │ │ UnderpinsService.java
│ │ │
│ │ └─web
│ │ │ HelloController.java
│ │ │ IndexController.java
│ │ │ PlanGoleApiContorller.java
│ │ │ PostsApiController.java
│ │ │ README.java
│ │ │ RecordsApiController.java
│ │ │ UnderpinsApiController.java
│ │ │ UnderpinsController.java
│ │ │
│ │ └─dto
│ │ │ HelloResponseDto.java
│ │ │ RecruitsDto.java
│ │ │
│ │ ├─plansGolesDto
│ │ │ GolesListResponseDto.java
│ │ │ GolesResponseDto.java
│ │ │ GolesSaveRequestDto.java
│ │ │ GolesUpdateRequestDto.java
│ │ │ PlansSaveRequestDto.java
│ │ │
│ │ ├─PostsDto
│ │ │ PostsListResponseDto.java
│ │ │ PostsResponseDto.java
│ │ │ PostsSaveRequestDto.java
│ │ │ PostsUpdateRequestDto.java
│ │ │
│ │ ├─RecordsDto
│ │ │ RecordsListResponseDto.java
│ │ │ RecordsMarkDto.java
│ │ │ RecordsSaveRequestDto.java
│ │ │ RecordsUpdateRequestDto.java
│ │ │
│ │ └─UnderpinsDto
│ │ UnderpinsListResponseDto.java
│ │ UnderpinsResponseDto.java
│ │ UnderpinsSaveRequestDto.java
│ │ UnderpinsUpdateRequestDto.java
│ │
│ └─resources
│ │ application-oauth.properties
│ │ application-real.properties
│ │ application.properties
│ ├─static
│ │ ├─css
│ │ │ animate.min.css
│ │ │ dashboard.css
│ │ │ signin.css
│ │ │ style.css
│ │ │ zabuto_calendar.min.css
│ │ │
│ │ ├─images
│ │ │ me.JPG
│ │ │
│ │ └─js
│ │ └─app
│ │ bootstrap.min.js
│ │ footer.js
│ │ index.js
│ │ jquery.lettering.js
│ │ jquery.textillate.js
│ │ mustache.min.js
│ │ planGole.js
│ │ recruitInfo.js
│ │ underpins.js
│ │ underpinsCookie.js
│ │ weekly.js
│ │ zabuto_calendar.min.js
│ │
│ └─templates
│ │ index.mustache
│ │ jobCalendar.mustache
│ │ login.mustache
│ │ planGole.mustache
│ │ posts-save.mustache
│ │ posts-update.mustache
│ │ posts.mustache
│ │ recruitInfo.mustache
│ │ underpins-save.mustache
│ │ underpins-update.mustache
│ │ underpins.mustache
│ │ weekly.mustache
│ │
│ └─layout
│ footer.mustache
│ header.mustache
│ headTitle.mustache
│ sidebar.mustache
└─test
├─java
│ └─webservice
│ └─springboot2
│ └─test
│ ├─domain
│ │ └─posts
│ │ plansGolesRepositoryTest.java
│ │ PostsRepositoryTest.java
│ │
│ └─web
│ │ HelloControllerTest.java
│ │ IndexControllerTest.java
│ │ PlanGoleApiControllerTest.java
│ │ PostsApiControllerTest.java
│ │
│ └─dto
│ HelloResponseDtoTest.java
│
└─resources
application.properties