Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

hiris

Java Spring과 DB 연결 본문

AWS

Java Spring과 DB 연결

hiris 2023. 10. 3. 13:20

먼저 MySQl을 DB로 사용해서 Java Spring boot와 연결을 해보려고 한다. 

그전에 준비사항으로는 mysql과 intellij 설치와 프로젝트 설치가 되어있어야 한다. 

 

나는 MySQL DB에 있는 모든 데이터를 가져오는 것을 목표로 하고 진행을 했다. 

그러기 위해서는 먼저 intellij와 DB 연동을 해야한다.

 

1. intellij와 MySQL 연동 


오른쪽 상단에 DB 아이콘이 있다. 이를 클릭해서 열어주자 .

그리고 + 버튼을 누른다음 정보를 적고 test connection을 했을 때 연결이 되면 성공! 

만약 Test Connection이 안되면 아마,, Password가 잘못됐을 확률이 80%이다. ㅎㅎ 

 

2. 연동


첫 번째로 해야할 것은 의존성을 추가해줘야 한다. 프로젝트 내부의 build.gradle로 들어가서 다음과 같은 코드를 추가하여 의존성을 추가해준다. 

implementation 'mysql:mysql-connector-java'

 

그 후 gradle의 변경된 내용을 로드해보자 

# provide jdbc url
spring.datasource.url=jdbc:mysql://localhost:3306/AWS?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true

# provide username and password
spring.datasource.username=root
spring.datasource.password={ 각자 비번 } 
spring.jpa.hibernate.ddl-auto=none

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.show-sql=true

이렇게 되면 일단 DB와 javaspring은 연동이 될 것이다. 

 

그 다음 DB에 있는 정보들을 다 가져와보자 

 

 

3. 코드 


나는 Application, Controller, DTO, Entity, Repository, Service를 다 사용해서 구현했다. 

여기서 역할 관계는 다음과 같다. 

 

이제부터는 코드를 어떻게 작성했는 지 보여주겠다. 

참고로 자꾸 빈 배열 값이 나와서 힘들었는데 DTO를 쓰니 바로 해결했다. DTO를 사용하면 json으로 파싱을 자동으로 해줘서 그런가 보다.. 

 

요약하면 다음과 같다. 

Controller : 해당 요청 url에 따라 적절한 view와 mapping 처리 

Service : 컨트롤러와 레포의 사이

Repository: DB 연결 

 

 

MemberController.js 

package com.example.EC2.controller;

import com.example.EC2.dto.MemberDTO;
import com.example.EC2.service.MemberService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/")
public class MemberController {

    private static final Logger logger = LoggerFactory.getLogger(MemberController.class);

    private MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }

    @GetMapping(value = "/entities",produces = MediaType.APPLICATION_JSON_VALUE)
    public List<MemberDTO> getAllMembers() {
        List<MemberDTO> members = memberService.getAllMembers();
        logger.info("Fetched members: {}", members);
        return members;
    }
}

 

 

MemberDTO.js

package com.example.EC2.dto;
import lombok.*;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class MemberDTO {
    private int id;
    private String name;
    private String APIName;
    private String InstanceMemory;
    private String Network;
    private String LinuxOnDemand;
    private String LinuxReserved;
    private String LinuxSpot;
    private String WindowsOnDemand;
    private String WindowsReserved;
}

 

MemberService.js 

package com.example.EC2.service;

import com.example.EC2.dto.MemberDTO;
import com.example.EC2.entity.MemberEntity;
import com.example.EC2.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class MemberService {
    private final MemberRepository memberRepository;

    @Autowired
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }

    public List<MemberDTO> getAllMembers() {
        List<MemberEntity> memberEntities = memberRepository.findAll();
        return memberEntities.stream()
                .map(entity -> new MemberDTO(
                        entity.getId(),
                        entity.getName(),
                        entity.getAPIName(),
                        entity.getInstanceMemory(),
                        entity.getNetwork(),
                        entity.getLinuxOnDemand(),
                        entity.getLinuxReserved(),
                        entity.getLinuxSpot(),
                        entity.getWindowsOnDemand(),
                        entity.getWindowsReserved()
                ))
                .collect(Collectors.toList());
    }
}

 

MemberRepository.js

package com.example.EC2.repository;

import com.example.EC2.dto.MemberDTO;
import com.example.EC2.entity.MemberEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;


@Repository
public interface MemberRepository extends JpaRepository<MemberEntity,Integer> {

}

 

MemberEntity.js

package com.example.EC2.entity;
import jakarta.persistence.*;
import lombok.*;

@Data // 이 어노테이션은 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 포함합니다.
@Entity
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "ec2")
public class MemberEntity {


    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;


    @Column(name = "name")
    private String name;

    @Column(name = "APIName")
    private String APIName;


    @Column(name = "InstanceMemory")
    private String InstanceMemory;

    @Column(name = "Network")
    private String Network;

    @Column(name = "linuxOnDemand")
    private String LinuxOnDemand;

    @Column(name = "LinuxReserved")
    private String LinuxReserved;

    @Column(name = "LinuxSpot")
    private String LinuxSpot;

    @Column(name = "WindowsOnDemand")
    private String WindowsOnDemand;

    @Column(name = "WindowsReserved")
    private String WindowsReserved;


    @Override
    public String toString() {
        return "MemberEntity{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", APIName='" + APIName + '\'' +
                ", InstanceMemory='" + InstanceMemory + '\'' +
                ", Network='" + Network + '\'' +
                ", LinuxOnDemand='" + LinuxOnDemand + '\'' +
                ", LinuxReserved='" + LinuxReserved + '\'' +
                ", LinuxSpot='" + LinuxSpot + '\'' +
                ", WindowsOnDemand='" + WindowsOnDemand + '\'' +
                ", WindowsReserved='" + WindowsReserved + '\'' +
                '}';
    }

}

 

그러면 DB 연동 성공!

 

'AWS' 카테고리의 다른 글

CIS 벤치 마크  (2) 2023.10.20
AWS를 사용한다면 반드시 알아야 할 네트워크 기초 지식  (0) 2023.10.20
EC2로 React 배포  (0) 2023.09.27
IAM 역할  (2) 2023.09.24
IAM 정책 ( Policy )  (0) 2023.09.22