실행 - DB연동까지

1. 생성이후

2. statics

vue로 만들어서 배포할때도 static에 넣는다고 한다.

3. 기본폴더생성

CM 이라고 함. 폴더 세개 생성

4. 검토 순서

4-1. HomeController.java
: @Controller = 컨트롤러 파일임을 명시함
: 크롬에서 입력한 주소가 일치하면 메소드가 실행
: value의 속성은 String[] = 배열형식
: 여기에서는 "/"와 "home" 모두 홈화면을 리턴하게 만듦
: application.properties 에서 설정한 templates 위치에 있는 home.jsp 파일을 리턴(불러와서 표시)함
: 확장자명도 설정했기떄문에 생략가능
4-2. Boot20220228Application.java
: 임의로 만든 컨트롤러의 위치를 지정
: @ComponentScan(basePackages = { "com.example.controller" })
4-3. 실행파일(Boot20220228Application.java)은 모든 @Controller가 붙은 컨트롤러 파일을 검토함
: 컨트롤러 파일이 여러개라면 다 검토를 함
: 대신 같은 주소명을 사용하면 안됨 (value에 들어가는 주소)


구동

1. Boot20220228Application.java

  1. 컨트롤러와 서비스의 위치를 지정한다.
    : @ComponentScan(basePackages = { "com.example.controller", "com.example.service" })
    1-1. 컨트롤러
    : java 구동 시 화면을 표시하거나 REST를 수행 하는 페이지
    1-2. 서비스
    : DB연동 수행부분
    : 서비스는 DB파일(설계도)과 DBImpl파일(수행부분)로 이루어진다
@SpringBootApplication
// 임의로 만든 컨트롤러의 위치를 지정
// 임의로 만든 서비스의 위치를 지정
@ComponentScan(basePackages = { "com.example.controller", "com.example.service" })
public class Boot20220228Application {
	public static void main(String[] args) {
		SpringApplication.run(Boot20220228Application.class, args);
		System.out.println("Hello World!");
	}
}

2. MemberController.java

  1. 컨트롤러 파일임을 명시함
    : @Controller

  2. 이 컨트롤러는 공통적으로 "/member" 아래에 주소를 만든다.
    : @RequestMapping(value = "/member")

  3. /member 라는 주소가 생략되어도 사용 가능함
    : @GetMapping(value = { "/insert" })
    = 127.0.0.1:8080/member/insert

  4. 리턴값은 파일명으로

  5. POST
    5-1. DB연동을 위해 설계도면을 가져옴
    : 설계도면 = MemberDB.java
    : @Autowired = 설계도 가져오는 명령어
    : private MemberDB memberDB; = 설계도는 MemberDB라는 정의
    5-2. POST는 사용자가 입력한 내용이 전달되고 DB 작업을 위해서 필요한 시점
    5-3. POST로 맵핑한다
    : @PostMapping(value = { "/insert" })
    : 이렇게 되면 GET과 크롬상에서는 같은 주소지만 수행하는 명령이 POST로써 차이가 있다.
    : jsp를 표시하는게 아니라 주소창에 입력후 엔터키를 누르는 효과가 있다.
    5-4. 모델잡아서 한번에 압축해서 entity로 보냄
    : 화면의 name과 Member.java의 변수명이 일치해야함
    : @ModelAttribute Member member) {
    5-5. 4.에서 가져온 도면의 메소드를 수행할 것을 명령
    : memberDB.insertMember(mem);
    : 실제 수행은 MemberDBImpl.java
    5-6. 리턴값은 화면을 표시하는 GET과 다르게 새로고침의 느낌으로 한다.
    : 주소창에 /member/insert 를 쓰고 엔터키를 누른것 처럼
    : 이렇게 되면 POST가 아닌 GET이 작동한것이 되어 입력값을 불러오는 현상이 없고, insert 페이지가 새로 열린 것과 같은 효과가 난다.

@RequestMapping(value = "/member")
@Controller
public class MemberController {
    
    @Autowired
    private MemberDB memberDB;

    // 127.0.0.1:8080/member/insert
    @GetMapping(value = { "/insert" })
    public String insertGET() {
        // 폴더명/파일명
        // 확장자명 생략
        // 처음 화면 띄우는 명령
        return "member/insert";
    }

    @PostMapping(value = { "/insert" })
    public String insertPOST(
            @ModelAttribute Member mem) {
        System.out.println(mem.toString());
        memberDB.insertMember(mem);       

        return "redirect:/member/insert";
    }
}

3. MemberDB.java - 설계도

  1. DB와 연동하는 부분 중 메소드만을 정의하는 설계도 부분
    : 파일 속성을 interface로 해야한다(추상화)
  2. Service라고 하며 이 파일이 Service임을 선언한다.
    : @Service
    : 서비스, 저장소 라고 불린다.
  3. 메소드 설계부분
    3-1. 추가할 내용을 Memer member로 주면
    : insertMember(Member member);
    3-2. 추가한 후에 실제 추가된 내용을 반환한다.
    : public Member
@Service
public interface MemberDB {
    public Member insertMember(Member member);
}

4. MemberDBImpl.java - 구동부

  1. DB연동을 실제로 수행하는 구현부
    : 구현부는 프레임워크에 따라서 안만들수도 있음
  2. Service 파일임을 선언한다.
    : @Service
  3. 추상화 된 설계도를 가져온다(MemberDB.java)
    : implements MemberDB
  4. DB연동
    : MongoDB 라이브러리를 application.properties 에서 사용 설정했기 때문
    4-1. application.properties
    : db 연동
    : spring.data.mongodb.uri=mongodb://id201:pw201@1.234.5.158:37017/db201
    : spring.data.mongodb.database=db201
    4-2. application.properties환경설정으로 생성된 객체 사용
    : @Autowired = mongoDB사용 선언
    : private MongoTemplate mongodb; = 사용변수 설정
  5. mongodb.(위에서설정한변수)를 쓰면 insert, update, find 등 REST로 사용 가능한 면령어들이 나온다. 여기서는 insert 선택!
  6. 타입Member 의 형태로 member라는 변수명으로 데이터를 던짐
    : mongodb.insert(member);
    6-1. 여기서 리턴값이 insert의 파라미터와 같다고 나옴
    : 즉, Member형태이기 떄문에 위의 명령어를 그대로 리턴값으로 둠
@Service
public class MemberDBImpl implements MemberDB {

    // public MemberDBImpl() {
    // 연동
    // 원래 이렇게 함
    // }

    // 환경설정으로 생성된 객체
    // application.properties 여기에서 설정한 mongodb 설정
    @Autowired
    private MongoTemplate mongodb;

    // implement 이후 Override
    @Override
    public Member insertMember(Member member) {
        try {
            // Member.java에서 컬렉션 정해둠

            // T = 내가 만든걸로 넣음
            // T로 리턴
            return mongodb.insert(member);
            // 여기에서 만든것을 컨트롤러에서 사용할수있도록만 하면 됨
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

}

5. insert.jsp

  1. 타임리프 사용 => html에서 반복문, if문 사용가능
    : <html lang="en" xmlns:th="http://www.thymeleaf.org">
  2. Bootstrap 사용
    : <link rel="stylesheet" type="text/css" th:href="@{/css/bootstrap.css}" />
    : <script type="text/javascript" th:src="@{/js/bootstrap.min.js}"></script>
  3. <form> 사용
<form th:action="@{/member/insert}" method="post">
	아이디 : <input type="text" name="id" /> <br>
    암호 : <input type="password" name="pw" /> <br>
    암호확인 : <input type="password" name="pw1" /> <br>
    이름 : <input type="text" name="name" /> <br>
    나이 : <input type="text" name="age" /> <br>
    <input type="submit" class="btn btn-primary" value="회원가입"> 
</form>
  1. submit 타입의 버튼을 누르면 form태그 안의 내용이 post라는 메소드를 통해서 컨트롤러로 넘어감.

  1. App에 서비스위치 지정
  2. 컨트롤러
  3. 서비스설계도면 db
  4. 구현부 dbimpl
profile
The best

0개의 댓글

Powered by GraphCDN, the GraphQL CDN