https://imasoftwareengineer.tistory.com/34?category=772561
위 글을 참조해 TO-DO List project를 만들어 보았습니다.
어플리케이션 서버와 데이터베이스 서버가 있다. 이 두 서버는 같은 컴퓨터에 있을 수도, 다른 컴퓨터에 있을 수도 있다. 중요한 것은 서버 컴퓨터는 유저의 컴퓨터가 아니라는 것이다.
이렇게 유저의 브라우저의 코드(js) + 어플리케이션 서버 + 데이터베이스 서버로 나누어져 있는 어플리케이션의 아키텍처를 3-tier 아키텍쳐라고 부른다.
목록 확인 | 목록 수정 및 추가 |
---|---|
@SpringBootApplication
@EnableMongoRepositories(basePackageClasses = CustomerRepository.class)
다음 어노테이션을 추가하였더니 해결되었지만, 다시 2번 에러가 발생했다.
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb
implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-mongodb', version: '2.5.0'
참고: https://stackoverflow.com/questions/63386079/no-bean-named-mongotemplate-available-spring-boot-mongodb, https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb/2.5.0
version: "3"
services:
mongodb:
image: mongo:3.4
environment:
- MONGO_DATA_DIR=/data/db
- MONGO_LOG_DIR=/dev/null
volumes:
- ./data/db:/data/db
container_name: "mongodb"
hostname: "mongodb"
ports:
- 27017:27017
command: mongod --smallfiles --logpath=/dev/null # --quiet
app:
image: to-do-springboot
ports:
- 5000:5000
links:
- mongodb
(+참고 Dockerfile)
# Start with a base image containing Java runtime
FROM java:8
# Add Author info
LABEL maintainer="ddddd@gmail.com"
# Add a volume to /tmp
VOLUME /tmp
# Make port 8080 available to the world outside this container
EXPOSE 5000
# The application's jar file
ARG JAR_FILE=build/libs/demo-0.0.1-SNAPSHOT.jar
# Add the application's jar to the container
ADD ${JAR_FILE} to-do-springboot.jar
# Run the jar file
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/to-do-springboot.jar"]
plugins {
id 'org.springframework.boot' version '2.5.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'springboot-todo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// mongo db related
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
}
test {
useJUnitPlatform()
}
server.port = 5000
spring.data.mongodb.uri= mongodb://mongodb:27017/TodoRepository
도커 이미지를 빌드해준다. 성공적으로 이미지가 생성되었을 경우 다음처럼 출력된다.
생성된 도커 이미지를 명령로 확인할 수 있다.
docker compose 전에 이미 5000 포트가 사용되는 중이면 안 되기 때문에 종료를 해줘야 한다.
docker-compose 를 이용해 mongo DB와 Spring boot를 도커에 올린다.
docker ps로 잘 실행되고 있는지 확인한다.
(+) docker desktop 화면을 보면 springboot-todo 를 확인할 수 있다.
해당 튜토리얼을 따라하면서 예상치 못한 에러들을 만났다. 그럼에도 구글링을 하면서 에러를 해결하려고 했고, docker 컨테이너를 올리는 것 까지 성공할 수 있었다. 👋
사실 docker 는 학부 때 한번 다뤄보긴 했으나 몇년 뒤 다시 해보려니 기억이 나질 않았다.. Dockerfile에 정의한 내용으로 도커 이미지를 빌드하고, docker-compose.yml 를 통해 도커에 deploy 된다는 것. 기억하자!!!!
번외이긴 하지만.. 도커의 포트 번호를 명시해주는 부분이 헷갈린다. 이 부분은 다시 한번 꼭 살펴봐야 될 것 같다.
많은 기능을 담고 있는 프로젝트는 아니였지만, 개념을 상기시키는 좋은 토이 프로젝트였다. 😊
https://stackoverflow.com/questions/48280589/mongo-is-not-able-to-reach-from-docker-container
https://stackoverflow.com/questions/49139704/spring-boot-mongo-mongosocketexception
https://imasoftwareengineer.tistory.com/34?category=772561
https://chaelin1211.github.io/study/2021/02/19/todo-project-02.html
https://chaelin1211.github.io/study/2021/03/12/springboot-error-01.html
https://imasoftwareengineer.tistory.com/40