오늘은 스프링부트 프로젝트를 시작해볼 것이다!!

스프링부트 프로젝트를 만들어보기 전에 우선 스프링부트 공식문서를 통해 기초 정보를 얻어보았다. (잘 이해는 안되지만..)
Spring | Home
Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.
spring.io
그리고 나서 책과 블로그를 통해서 스프링부트 프로젝트를 만들어보기 시작했다.
참고 블로그: https://ng-log.tistory.com/22#google_vignette
[SpringBoot] 스프링부트 프로젝트 시작하기 - 1. 프로젝트 생성
스프링 프로젝트를 다시 시작하려고 프로젝트를 생성했는데, 2.x 버전의 생성이 지원 종료되었다. 이로 인해 기존 Security나 Querydsl 등의 적용 방법에 차이가 생겼고, 이러한 변화를 정리하여 기본
ng-log.tistory.com
참고한 책: 스프링부트3 백엔드 개발자 되기: 자바 편

프로젝트 진행 환경
- JAVA 21 (precourse 요구사항과 동일하게)
- Intellij
- Mac
- Spring boot 3.5.7

- 스프링 부트 프로젝트의 기본 구조를 생성해 주는 공식 웹 도구
1. Spring Web: RESTful 웹 API 또는 웹 애플리케이션을 구축하기 위한 프레임워크
2. Spring Data JPA: 데이터베이스와의 작업을 처리할 수 있게 해주는 추상화 계층
3. H2 Database (관계형 데이터베이스): 별도 설치가 불필요하고 의존성 추가만으로 사용 가능하므로 MySQL 과 같은 외부 데이터베이스를 연결할 필요없이 이번 프로젝트에 적합한 데이터베이스라고 판단했다.
4. Lombok (라이브러리): @Getter, @RequiredArgsConstructor 등의 어노테이션(Annotation)을 통해, 자바의 반복적인 코드를 컴파일 시점에 자동으로 생성해준다.
이렇게 하고 generate 버튼을 누르니 스프링부트 프로젝트가 파일로 다운받아졌다!!
여기까지 한 후 Git 에 프로젝트를 올려보았다. 미션을 진행할 때에는 항상 포크한 후 깃을 clone받아서 한 거라 쉬웠는데 이번에는 오랜만에 내 프로젝트를 깃에 새롭게 등록하는 것이여서 살짝 헷갈렸다 ㅎ 제일 헷갈렸던 것은 항상 서브 브랜치로 올리고 메인에 합치는 버릇이 있어서 이번에도 처음에 main이 아닌 im-minji 브랜치를 만든 후 push 하였는데 im-minji 브랜치가 default브랜치가 되어버린 것이다 이런! 그래서 레포지토리 상에서 디폴트 브랜치 이름을 main으로 바꾸고 새롭게 im-minji 브랜치를 생성하였는데 터미널에는 그대로 im-minji 만 뜨고 업데이트가 안된것이다!

그래서 당황했지만 어찌저찌 해결은 했는데.. 이것이 진짜로 im-minji에 업데이트 하면 main이 아닌 im-minji로 푸시 되는지는 지켜봐야 할 것 같다. 깃은 괜찮다가도 한 번 막히면 땀이 뻘뻘이다 휴
Github에 까지 다 올리고 나서 인텔리제이로 받아둔 lotto 폴더를 열어 LottoApplication을 실행해보니
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.5.7)
2025-11-08T20:46:59.736+09:00 INFO 77880 --- [lotto] [ main] com.woowa.lotto.LottoApplication : Starting LottoApplication using Java 21.0.8 with PID 77880 (/Users/imminji/Desktop/git/lotto/build/classes/java/main started by imminji in /Users/imminji/Desktop/git/lotto)
2025-11-08T20:46:59.737+09:00 INFO 77880 --- [lotto] [ main] com.woowa.lotto.LottoApplication : No active profile set, falling back to 1 default profile: "default"
2025-11-08T20:46:59.923+09:00 INFO 77880 --- [lotto] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2025-11-08T20:46:59.930+09:00 INFO 77880 --- [lotto] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 4 ms. Found 0 JPA repository interfaces.
2025-11-08T20:47:00.087+09:00 INFO 77880 --- [lotto] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2025-11-08T20:47:00.093+09:00 INFO 77880 --- [lotto] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-11-08T20:47:00.093+09:00 INFO 77880 --- [lotto] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.48]
2025-11-08T20:47:00.114+09:00 INFO 77880 --- [lotto] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-11-08T20:47:00.114+09:00 INFO 77880 --- [lotto] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 365 ms
2025-11-08T20:47:00.164+09:00 INFO 77880 --- [lotto] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2025-11-08T20:47:00.233+09:00 INFO 77880 --- [lotto] [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:7d11de1c-76c9-411b-8d15-b6dffe22bb89 user=SA
2025-11-08T20:47:00.233+09:00 INFO 77880 --- [lotto] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2025-11-08T20:47:00.252+09:00 INFO 77880 --- [lotto] [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2025-11-08T20:47:00.272+09:00 INFO 77880 --- [lotto] [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.6.33.Final
2025-11-08T20:47:00.285+09:00 INFO 77880 --- [lotto] [ main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
2025-11-08T20:47:00.389+09:00 INFO 77880 --- [lotto] [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
2025-11-08T20:47:00.419+09:00 INFO 77880 --- [lotto] [ main] org.hibernate.orm.connections.pooling : HHH10001005: Database info:
Database JDBC URL [Connecting through datasource 'HikariDataSource (HikariPool-1)']
Database driver: undefined/unknown
Database version: 2.3.232
Autocommit mode: undefined/unknown
Isolation level: undefined/unknown
Minimum pool size: undefined/unknown
Maximum pool size: undefined/unknown
2025-11-08T20:47:00.546+09:00 INFO 77880 --- [lotto] [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
2025-11-08T20:47:00.548+09:00 INFO 77880 --- [lotto] [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2025-11-08T20:47:00.562+09:00 WARN 77880 --- [lotto] [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2025-11-08T20:47:00.726+09:00 INFO 77880 --- [lotto] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2025-11-08T20:47:00.729+09:00 INFO 77880 --- [lotto] [ main] com.woowa.lotto.LottoApplication : Started LottoApplication in 1.12 seconds (process running for 1.35)
실행되었다!!!!! 얏호

여기까지 진행한 후 갑자기 .gitignore에 대한 생각이 났다 오마갓 그냥 프로젝트를 진행할 때에는 올리면 안되는 파일이 없어서 생각조차 하지 못했었다. 그래서 프로젝트에 있는 .gitigonre 파일을 보니 이미 파일 내용이 적혀있었다. 휴~~~ 그래도 조금 더 수정해서 다시 깃에 올렸다👍
이제 만들어둔 객체를 스프링 프로젝트로 옮길 시간이다~~
옮기기 전에 3일차에 조사했던 대로 패키지를 만들었다 뷰를 제외하고 나머지를 패키지로 만들었으면 그 중 domain 안으로 내가 만든 객체들을 붙여넣었다.
- Application: 프로그램의 시작점
- Domain: 각 객체들이 들어가는 패키지
- Controller: 입력을 통해 전달받은 요청에 따라 객체에 알맞은 서비스를 연결하고 전달받은 결과를 뷰로 전달
- Service: 객체를 이용해 실제 요청을 처리
- View: 입출력에 관한 것들 (이부분은 나중에 처리할 예정)
- Exception: 예외 처리
- Repository: 데이터베이스 역할 (지금은 로또 관리 리스트를 이곳에서 관리하도록)

근데 이렇게 옮기다보니 형태가 1~3주차 미션에서 fork받은 프로젝트들과 똑같이 생긴 것이다..! 그래서 나는 뭐지 내가 지금까지 했던 것들이 스프링부트 프로젝트였나..? 라는 의문이 생겼다. 이 부분은 Gemini의 도움을 받아 해결하였다. 그래서 결론은 아니였다! 헤헷 1~3주차는 Gradle을 쓴 콘솔 앱이었고, 현재 프로젝트는 Gradle'을 쓴 웹 앱'(Spring Boot)라고 한다. 생각해보니 지난 프로젝트들은 실행하였을 때 한 번 실행되고 끝나는 프로그램이였지만 지금 프로젝트는 LottoApplication을 실행하면 자동으로 8080 포트가 열려 웹 서버가 실행된다는 차이점이 있었다 😁
오늘은 스프링부트를 처음 만들어보았다 이렇게 start.spring.io로 의존성을 추가하여 쉽게(?) 웹 서버를 만드는 것에 놀랐다. 아직 남은 것들이 많지만 그래도 시작이 반이라는 말이 있으니!!! 이번 미션기간동안 꼭 내가 설계한 것들을 다 완성시켜서 돌아가는 웹을 보고싶다. 내일은 이제 붙여넣은 객체들을 스프링부트 스타일에 맞게 수정하고 repository부터 만들어볼 것이다. 아자아자