1. Tensorflow 다운로드

https://www.tensorflow.org/install/lang_c?hl=ko#extract 

 

TensorFlow for C 설치

TensorFlow for C 설치 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. TensorFlow는 다른 언어에 대한 바인딩을 빌드하는 데 사용할 수 있는 C API를 제공합니다. 이 A

www.tensorflow.org

위 링크로 들어가 파일을 다운받아 줍니다.

 

2. 경로 설정 해주기

C/C++ (일반) -> 추가 포함 디렉터리 -> include 경로 추가

 

 

링커 (일반) -> 추가 라이브러리 디렉터리 -> lib 경로 추가

 

 

 

링커 (입력) -> 추가 종속성 -> lib 파일 추가

 

 

3. TEST

 

 

4. .pb 파일 만들기

C++에 모델을 적용하기 위해서는 아래와 같이 저장을 진행해주어야 합니다.

 

model = keras.models.load_model("./model.h5")
model.save('./model')

 

비즈니스 요구사항 정리

  1. 데이터
    • 회원 ID
    • 이름
  2. 기능
    • 회원 등록, 조회
  3. 아직 데이터 저장소가 선정되지 않음

여기에서 MemberRepository를 Interface로 생성하는 이유는 데이터 저장소가 선정되지 않았기 때문입니다.

 

추후에 구체적인 기술이 선정되고 나면 바꿔 끼우는 작업을 진행하면 됩니다.

 

Controller : 외부 요청을 받고,

Service : 비즈니스 로직 처리

Repository : 데이터 저장

 

회원 Domain과 Repository 만들기

먼저 domain package를 만들어 줍니다.

 

 

그 후, domain package 내 Member라는 Class를 만들어 주는데 사용할 데이터인 ID, Name 변수를 선언해주고 Getter와 Setter를 선언해줍니다.

 

 

그 다음은 repository라는 package를 생성해주고 그 내부에 MemberRepository Interface를 생성해주겠습니다.

 

그 후, 구현체를 repository package에 MemoryMemberRepository Class를 만들어 줍니다.

 

MemoryMemberRepository Class에서 implements MemberRepository를 해주게 되는데

 

Implement methods 단축키는 ALT + Enter를 누르면 위와 같은 창이 나오게 되고 계속 실행을 해주면 아래 사진과 같이 생성됩니다.

변수

그 후, 변수를 선언해줍니다.

 

store는 member 변수들이 저장될 변수, sequence는 member의 ID 값을 지정해주기 위해 사용합니다.

 

save 기능

save

save 함수에는 멤버를 저장할 수 있는 기능을 만들어 줍니다.

 

멤버마다 다른 아이디값을 지정해야 하므로 sequence++를 해줍니다.

 

findById 기능

null 이 반환될 가능성이 있기 때문에 Optional.ofNullable로 감싸줍니다.

 

 

findByName 기능

 

findAll 기능

 

 

Repository TEST Case 작성 - JUnit

이제 작성한 코드를 검증하는 시간입니다.

 

이때 TEST Case를 작성하여 검증을 진행하면 됩니다.

 

먼저 테스트를 위해 repository 패키지를 생성해주고, 클래스를 생성해줍니다.

 

 

그리고 위와 같이 환경을 구성하여 테스트를 진행할 수 있습니다.

 

그런데 Test 클래스 전체를 실행하면 오류가 발생합니다.

 

그 이유는 테스트를 진행할때 클래스 내부에 있는 각각의 테스트가 순서대로 진행되지 않고 무작위로 진행되기 때문에

 

이미 repository 안에 "spring1" 과 "spring2" 가 저장되어 있어서 오류가 발생한겁니다.

 

그래서 테스트를 진행할 때마다 repository를 초기화 시켜주어야 합니다.

 

먼저 MemoryMemberRepository.java 로 가서 store를 비워주는 함수를 만들어 줍니다.

 

그리고 MemoryMemberRepositoryTest.java에 위와 같은 @AfterEach를 추가해줍니다.

 

@AfterEach 는 테스트가 끝날때마다 실행되는 함수입니다.

 

예를 들어, save() -> afterEach() -> findByName(0 -> afterEach() -> findAll() -> afterEach() 이런 식으로 실행됩니다.

 

사실 자동으로 Test를 생성해주는 단축키가 있습니다.

 

바로 Ctrl + Shift + T 입니다.

 

 

Service 만들기

service package

 

 

이제 기능을 구현했으니 기능이 실제로 쓰이는 service를 만들어 보겠습니다.

 

첫째로 service package를 생성해주고 MemberService 클래스를 생성해줍니다.

 

그 후, 아래와 같이 기능이 동작하도록 함수들을 생성해줍니다.

이제 Test를 해보겠습니다.

 

위에서 언급했던 것처럼 Ctrl + Shift + T를 눌러 Test 코드를 생성해줍니다.

 

 

Service Test Case

 

 

 

 

 

 

 

 

 

 

출처 : 인프런 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)

'Web > backend' 카테고리의 다른 글

07 - 02. 회원 관리 예제  (0) 2022.11.03
06. API - 정리  (0) 2022.10.05
05. 정적 컨텐츠, MVC  (0) 2022.10.04
04. 빌드하고 실행하기  (0) 2022.10.04
03. Welcome Page 만들기  (0) 2022.09.30

API - String

 

동적 페이지를 만들어 주는 방법에는 templates engine과 API를 이용하는 두가지 방법이 있습니다.

 

일단 코드부터 보겠습니다.

 

Controller

먼저 controller에 위와 같은 코드를 입력해 줍니다.

 

여기서 @ResponseBody 라는 태그는 http의 body부에 "hello " + name; 을 직접 넣어주겠다 라는 의미 입니다.

 

API와 Template의 차이는 API에는 View가 없는 것입니다.

 

즉, API는 html 태그 없이 문자 그대로를 client에게 보내줍니다.

 

확실하게 비교하기 위해서 페이지 소스보기를 눌러보면

 

Template

 

API - String

위의 사진들을 보면 Template는 html 태그들을 전달해주고, API는 문자 그대로를 전달해줍니다.

 

여기서 일반 String을 전달해주지 않고 객체를 전달해주면 어떻게 될까요??

 


API - Object (객체)

 

먼저 객체를 만들어 줍니다.

 

Class

Getter와 Setter를 편하게 만들어주는 방법은

 

Window 기준 ALT + insert 를 눌러주면 Generate 창이 뜹니다.

 

여기서 getter setter를 검색하면 아래와 같이 나오고 enter를 눌러주면 아래와 같이 저절로 함수가 생성됩니다.

 

Generate

 

그리고 Controller에 객체를 output으로 내보내는 함수를 만들어 줍니다.

Controller

이제 서버를 재시작하고 localhost:8080/hello-api?name=spring!!!!! 로 접속을 해보면

 

API - Class

왼쪽 위와 같은 페이지가 나오게 되고 페이지 소스보기를 하면 오른쪽 위와 같이 나오게 됩니다.

 

페이지 소스를 보면 Key, Value 형태를 가진 Json으로 나오게 됩니다.

 

과거에는 xml 형태도 많이 쓰였지만 무겁고 열고 닫고 태그를 두번 써야해서 거의 Json 형태로 통일이 됐습니다.

 

이제 동작 방식을 보겠습니다.

API - Object

@ResponseBody 태그가 있기 때문에 client에게 그대로 데이터를 넘겨줍니다.

 

하지만 문자가 아니라 객체이기 때문에 spring에서는 HttpMessageConverter를 통해 (Jackson이라는 라이브러리 사용)

 

객체면 JsonConverter가 동작하여 Json 방식으로 데이터를 만들어서 넘겨주게 됩니다.

 


정리 : 

  • 정적 컨텐츠 - 그냥 파일을 그대로 전달한다.
  • MVC, Template Engine - Template Engine을 Model, View, Controller 형태로 쪼개서 랜더링된 html을 전달한다.
  • API - 객체를 HttpMessageConverter를 통해서 JSON 형태로 바꿔서 전달한다.

 

 

 

 

출처 : 인프런 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)

'Web > backend' 카테고리의 다른 글

07 - 02. 회원 관리 예제  (0) 2022.11.03
07 - 01. 회원 관리 예제  (0) 2022.10.05
05. 정적 컨텐츠, MVC  (0) 2022.10.04
04. 빌드하고 실행하기  (0) 2022.10.04
03. Welcome Page 만들기  (0) 2022.09.30

1. 정적 컨텐츠

 

03. Welcome Page 만들기에서 만든 Welcome Page가 정적 컨텐츠입니다.

 

서버에서 하는거 없이 파일 그대로 웹브라우저에 내려주는 것을 지칭합니다.

 

※ spring boot에서의 정적 컨텐츠 문서 ※

 

먼저 간단하게 static 폴더에 아무 html 파일을 만들어 주겠습니다.

 

저는 김영한님 강의를 따라서 진행하므로 hello-static.html 로 만든 후에 진행하겠습니다.

 

hello-static.html

서버를 실행시켜주고 이제 localhost:8080/hello-static.html 으로 이동해보겠습니다.

 

그러면 위와 같이 hello-static.html 페이지로 이동하게 됩니다.

 

즉, 원하는 html 파일을 static 폴더에 넣으면 정적파일이 그대로 반환 됩니다.

 

하지만 어떤 프로그래밍을 할 수는 없습니다.

 

정적 컨텐츠

 

 


MVC

 

MVC는 Model, View, Controller의 약자입니다.

 

옛날에는 Controller와 View가 구분되어 있지 않았습니다. 이러한 방식을 Model One 방식이라고 지칭합니다.

 

하지만 현재는 Model, View, Controller 3가지로 나누는 MVC 방식이 대중적입니다.

 

그림을 보면 

 

1. 사용자가 controller를 조작

2. controller는 model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 view 제어

3. view를 사용자에게 전달

 

위와 같은 순서로 처리가 됩니다.

 

Controller
View

 

 


 

새로운 페이지 만들기

 

먼저 templates 폴더 내부에 hello-template.html 파일을 만들어 주겠습니다.

templates html

그 후, controller에 함수를 추가해주겠습니다.

controller

실행 후에 localhost:8080/hello-mvc 로 접속하면 페이지에서 Whitelabel Error Page 가 뜨게 되게 로그를 보면

 

Required request parameter 'name' for method parameter type String is not present]

 

Warning 메시지가 뜨게 될겁니다.

 

메시지를 살펴보면 'name'이라는 parameter가 필요하다고 나옵니다.

 

그러면 이제 localhost:8080/hello-mvc?spring!!! 으로 접속해보면

 

이런식으로 페이지가 생성 됩니다.

 

동작 방식을 살펴보면

  1. localhost:8080/hello-mvc 에 접속
  2. 내장 톰캣 서버에서 hello-mvc라는게 온 걸 스프링에게 전달
  3. 스프링은 helloController에 mapping이 되어 있는걸 인식 및 호출
  4. name을 spring!!!으로 변경 후 모델에 담아주고 hello-templates 라는 html을 return
  5. viewResolver가 사용자에게 templates/hello-template.html 을 Thymeleaf 탬플릿 엔진에 넘겨준다.
  6. Thymeleaf가 랜더링을 해서 사용자에게 넘겨줍니다.

 

 

 

출처 : 인프런 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)

'Web > backend' 카테고리의 다른 글

07 - 01. 회원 관리 예제  (0) 2022.10.05
06. API - 정리  (0) 2022.10.05
04. 빌드하고 실행하기  (0) 2022.10.04
03. Welcome Page 만들기  (0) 2022.09.30
02. 사용하는 library  (0) 2022.09.30

환경 변수 설정

 

먼저 cmd 창에서 java를 사용가능하게 환경변수 부터 설정해주겠습니다.

 

시스템 환경 변수 편집에 들어가서

 

JAVA_HOME 경로를 새로 만들어주고 Path에 %JAVA_HOME% 을 추가해주면 끝입니다!

 

 


Build 하기

 

일단 저는 Window 환경에서 실행하므로 Window 기준으로 말씀 드리겠습니다.

 

먼저 프로젝트가 있는 폴더에서 cmd 창을 실행해줍니다.

 

폴더 구조

위와 같이 폴더구조가 있을텐데 build를 위해서 gradlew.bat build 명령어만 입력해주면 자동으로 됩니다!

위와 같은 ERROR가 생길경우에는 build.gradle로 들어가서 sourceCompatibility 항목을 현재 사용하고 있는 JAVA 버전에 맞게 수정해주면 됩니다.

 

저 같은 경우에는 11로 수정해주었습니다.

 

build에 성공했다면 build/libs 폴더로 들어가 줍니다.

 

java -jar hello-spring-0.0.1-SNAPSHOT.jar

 

위의 명령어를 실행하게 되면

 

정상적으로 서버가 동작되는 것을 볼 수 있습니다.

 

 

※ 다른 명령어!! ※

gradlew.bat clean - build 된 것들을 없애줍니다.

gradlew.bat clean build - build 된 것들을 없애고 다시 빌드합니다.

 

 

 

출처 : 인프런 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)

'Web > backend' 카테고리의 다른 글

06. API - 정리  (0) 2022.10.05
05. 정적 컨텐츠, MVC  (0) 2022.10.04
03. Welcome Page 만들기  (0) 2022.09.30
02. 사용하는 library  (0) 2022.09.30
01. Spring initializr, IntelliJ 사용하기  (0) 2022.09.30

첫 게시글에서 위와 같이 웹페이지를 여는것에 성공했지만 각종 오류 메시지로 가득합니다.

 

먼저 src -> main -> resource -> static 폴더에 index.html 파일을 새로 만들어 줍니다.

 

static에 index.html 파일은 spring boot가 기본적으로 Welcome Page로 인식합니다.

https://docs.spring.io/spring-boot/docs/2.7.4/reference/htmlsingle/#web

 

index.html 파일에 아래와 같은 html 코드를 입력해줍니다.

 

html 코드

더보기
<!doctype html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>Hello</title>
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>

 

이제 HelloSpringApplication.java를 재실행 해준 후에 localhost:8080 으로 접속하면 아래와 같은 페이지가 나오게 됩니다.

 

 


Template Engine

 

위에서 만든 Welcome Page는 html 코드를 그냥 그대로 넘겨준것 입니다.

 

Template Engine을 사용하면 html의 코드를 변경할 수 있습니다.

 

Template Engine은 Thymeleaf 사용하겠습니다.

 

먼저 hello.hellospring 폴더 내부에 controller package를 생성해줍니다.

 

그 후, controller 패키지 폴더 내부에 HelloController 클래스 파일을 하나 만들어 주고 위의 내용을 적어줍니다.

 

여기서 @GetMapping("hello") 의 의미는 /hello라고 들어오면 아래의 hello 함수가 실행되게 됩니다.

 

다음으로는 /hello 페이지를 만들어 주겠습니다.

 

templates 폴더 내부에 hello.html 파일을 만들어 준 후에 위의 내용을 채워줍니다.

 

이제 model.addAttribute("data", "hello"); 의 의미를 보겠습니다.

 

여기서 "data"는 hello.html의 ${data}와 같다고 보시면 되고 "data"를 "hello"로 치환하겠다는 의미가 되겠습니다.

 

이제 localhost:8080/hello 로 접속을 하면

 

위와 같이 data가 치환이 되어서 나오는 것을 볼 수 있습니다.

 

 


동작 방식

이제 동작방식을 보겠습니다.

 

springboot에는 톰켓이라는 내장 서버가 있습니다.

 

url에 localhost:8080/hello 라고 던지게 되면 톰켓에서 /hello 라는 것을 인식하게 되고

 

spring controller를 보면 @GetMapping("hello") 라는 문구에서 hello와 매칭시켜주게 됩니다.

 

그 후에, spring이 model을 만들어서 인자값으로 넣어주게 되고 저희가 정의한 함수가 실행하게 됩니다.

 

그리고 return "hello"; 라는 문구는 templates 폴더 내부에 있는 hello.html을 실행시켜라 라는 지시를 내리게 됩니다.

 

 

 

 

 

 

출처 : 인프런 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)

 

'Web > backend' 카테고리의 다른 글

06. API - 정리  (0) 2022.10.05
05. 정적 컨텐츠, MVC  (0) 2022.10.04
04. 빌드하고 실행하기  (0) 2022.10.04
02. 사용하는 library  (0) 2022.09.30
01. Spring initializr, IntelliJ 사용하기  (0) 2022.09.30

프로젝트 내의 build.gradle을 보면

 

여기서 제가 땡겨온 library는 thymeleaf, web, test (test는 자동으로 땡겨온다.) 가 있습니다.

 

이것들 뿐만 아니라 자동으로 땡겨오는 library는 아래와 같이 엄청 많다.

이렇게 굉장히 많다.

 

이렇게 많은 이유는 library간의 의존성이 존재하기 때문입니다.

 

IntelliJ 왼쪽 아래 부분을 클릭한 후에 IntelliJ 창 오른쪽을 보시면 Gradle이 보입니다.

 

Gradle을 클릭해주면 현재 저희가 가져온 library를 사용하기 위한 의존성을 확인할 수 있습니다.

 

 

'Web > backend' 카테고리의 다른 글

06. API - 정리  (0) 2022.10.05
05. 정적 컨텐츠, MVC  (0) 2022.10.04
04. 빌드하고 실행하기  (0) 2022.10.04
03. Welcome Page 만들기  (0) 2022.09.30
01. Spring initializr, IntelliJ 사용하기  (0) 2022.09.30

Spring 프로젝트 만들기

 

https://start.spring.io/


spring boot를 이용하여 spring 프로젝트 만들기

 

위 사이트로 들어가면 위와 같은 페이지가 나옵니다.

 

  1. Project : 필요한 library를 가져오고 빌드하는 라이프 사이클을 관리해주는 TOOL
    • Maven Project : 과거에 많이 쓰였다.
    • Gradle Project : 현재 많이 쓰인다.
  2. Language : 개발 언어
  3. Spring Boot : 버전
    • SNAPSHOT, M1 등... : 정식 버전이 아닌 개발중인 버전
    • 옆에 아무것도 붙지 않은 것이 정식 버전!
  4. Project Metadata
    • Group : 기업명이나 도메인
    • Artifact : 프로젝트명, 빌드를 진행했을때 나오는 결과물
  5. Dependencies : 프로젝트 시작전에 어떤 library를 가져와 사용할 것인지.

  6. GENERATING... : 프로젝트 생성

다운 받은 후 실행할 위치에서 압출 풀어주기!

 

그 후, Intellij 에서 실행시켜주면 됩니다.

 

프로젝트를 처음 오픈하면 외부의 library를 다운받는 로딩 시간이 생깁니다.

 


구조 살펴보기

 

  • .idea : Intellij 가 사용하는 설정파일
  • gradle : gradle과 관련된 폴더
  • src
    • main
      • java : 실제 패키지 및 소스 파일
      • resources : 실제 자바 코드 파일을 제외한 나머지 xml, html 등...
    • test
      • java : 테스트 코드
      • resources : 실제 자바 코드 파일을 제외한 나머지 xml, html 등...
    • build.gradle : 프로젝트 및 dependencies 정보

 

 


 

실행해보기

 

먼저 main 폴더 내부의 HelloSpringApplication을 열어줍니다.

 

만약 실행이 안된다면 환경 설정을 해주어야 합니다.

 

1. Build Tools 설정해주기

File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle

프로도 오른쪽에 있는 Build and run using, Run tests using의 설정값을 IntelliJ IDEA로 바꿔줍니다.

 

 

2. Compiler 설정해주기

File -> Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler

프로도 왼쪽에 있는 Project bytecode version을 설치한 Java 버전에 맞게 설정해줍니다.

 

 

3. Project Structure 설정해주기

File -> Project Structure -> Project, Modules

 

Project 안의 SDK, Language level을 현재 설치된 자바 버전에 맞게 설정해줍니다.

 

Modules 에서는 Language level을 현재 설치된 자바 버전에 맞게 설정해줍니다.

 

 

이제 실행을 해주면 아래와 같은 결과가 나오게 됩니다.

 

 

이제 인터넷 주소창에 localhost:8080 을 입력해주면 아래와 같은 웹페이지를 볼 수 있습니다.

여기까지 완료되면 환경설정은 완료된 겁니다!

'Web > backend' 카테고리의 다른 글

06. API - 정리  (0) 2022.10.05
05. 정적 컨텐츠, MVC  (0) 2022.10.04
04. 빌드하고 실행하기  (0) 2022.10.04
03. Welcome Page 만들기  (0) 2022.09.30
02. 사용하는 library  (0) 2022.09.30

+ Recent posts