반응형

1. 구글 클라우드 로그인

https://cloud.google.com/free?utm_source=google&utm_medium=cpc&utm_campaign=japac-KR-all-ko-dr-BKWS-all-core-trial-EXA-dr-1710102&utm_content=text-ad-none-none-DEV_c-CRE_668690472449-ADGP_Hybrid+%7C+BKWS+-+EXA+%7C+Txt+-GCP-General-core+brand-main-KWID_43700077514871055-kwd-6458750523&userloc_1009853-network_g&utm_term=KW_google+cloud&gad_source=1&gclid=Cj0KCQjw2ZfABhDBARIsAHFTxGx1L77xMGjYqC88XUk3PlxCYMPheRU28eD0s56u0E9txjBmV5vXrSoaAq02EALw_wcB&gclsrc=aw.ds

 

https://cloud.google.com/free?gad_source=1&gclid=Cj0KCQjw2ZfABhDBARIsAHFTxGx1L77xMGjYqC88XUk3PlxCYMPheRU28eD0s56u0E9txjBmV5vXrSoaAq02EALw_wcB&gclsrc=aw.ds&userloc_1009853-network_g=&utm_campaign=japac-KR-all-ko-dr-BKWS-all-core-trial-EXA-dr-1710102&utm_content=text-ad-none-none-DEV_c-CRE_668690472449-ADGP_Hybrid+%7C+BKWS+-+EXA+%7C+Txt+-GCP-General-core+brand-main-KWID_43700077514871055-kwd-6458750523&utm_medium=cpc&utm_source=google&utm_term=KW_google+cloud

 

cloud.google.com

 

 

2. 새 프로젝트 만들기

 

프로젝트 이름 자유롭게 작성하시고 위치는 작성안해도 됩니다.

만들기 버튼 클릭

 

3. Google Sheets API 활성화

API 및 서비스 클릭

 

 

라이브러리 클릭

 

Google Sheets API 검색해서 사용 클릭

 

4. 서비스 계정 생성 및 키 발급

IAM 및 관리자 클릭

 

서비스계정 -> 서비스 계정 만들기 클릭

 

서비스 계정 이름 작성 후 완료 클릭

 

생성된 이메일 클릭

이 이메일 주소 저장해두기

 

키 -> 키 추가 -> 새키만들기 클릭

 

JSON 선택 후 만들기 클릭

 

만들기 클릭시 다운로드 된 JSON파일 저장해두기

 

5. Google Sheets 생성

공유버튼 클릭 해서 아까 저장해둔 이메일 주소를 편집자로 선택해서 공유하기

 

이 시트 정보와 저장한 JSON 키값으로 프로젝트와 구글스프레드시트 연동 진행함.

반응형
반응형

처음 설정을 마치고 tomcat으로 프로젝트를 실행했을 때 나온 에러

스프링 기본 설정 후, 처음 tomcat으로 프로젝트를 실행했는데 다음과 같은 오류가 발생했다.

오류의 이름은 

 

URI$MalformedURIException

 

처음엔 이게 뭔가싶었는데 저기에 invalid character가 웹이라는걸 보고 한글이 문제구나 싶었다.

오류가 발생한 원인은 기본내장된 xml parser로는 한글처리가 부족하여 다른 xml parser를 추가해줘야한단다.

찾아보니 해결법은 간단했다. apache에서 만든 xerces 파서 dependency를 주입해주면 해결된다.

 

<!-- path -->
<dependency>
	<groupId>xerces</groupId>
	<artifactId>xercesImpl</artifactId>
	<version>2.9.1</version>
</dependency>

pom.xml 파일에 위 dependency 하나만 추가해주면 된다.

 

 

Xerces에 대한 정보 : http://en.wikipedia.org/wiki/Xerces

 

반응형
반응형

'의존성 주입' 이라는 개념.

 

'의존성'이란 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미.

 

'주입'은 말 그대로 외부에서 밀어 넣는 것을 의미.

 

즉, 두 단어를 결합해서 본다면 '어떤 객체가 필요한 객체를 외부에서 밀어 넣는다'는 의미.

 

그렇다면 왜?? 외부에서 객체를 주입하는 방식을 사용하는가?

 

음식점을 예로 들어보면 쉽게 이해할 수 있다.

 

1. 식재료를 직접 구매하여 음식점을 운영한다.

- 식재료 구매도 신경쓰고, 음식점 운영도 신경 써야 한다.

 

2. 외부에서 식재료를 공급해주고 그걸 이용해서 음식점을 운영한다.

- 식재료 수급이 편이하고, 장사에만 집중할 수 있다.

 

2번 처럼 외부에서 주입 받는경우 개발에만 집중할 수 있게 되는 것이다.

 

스프링은 이러한 구조를 만들기 적합한 구조로 설계되어 있다. 스프링에서는 'ApplicationContext'라는 존재가 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 해주는 구조이다. 따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 생성하고, 이러한 객체들을 엮는 작업을 하는 형태의 개발을 한다. ApplicationContext가 관리하는 객체들을 빈(Bean) 이라고 부르고, 빈과 빈 사이의 의존관계를 처리하는 방식으로 XML 설정, 오노테이션 설정, Java 설정 방식을 이용할 수 있음.

반응형
반응형

POJO(Plain Old Java Object)

- 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다. 2000년 9월에 마틴 파울러, 레베카 파슨, 조쉬 맥킨지 등이 사용하기 시작한 용어로서 마틴 파울러는 다음과 같이 그 기원을 밝히고 있다. [1]

우리는 사람들이 자기네 시스템에 보통의 객체를 사용하는 것을 왜 그렇게 반대하는지 궁금하였는데, 간단한 객체는 폼 나는 명칭이 없기 때문에 그랬던 것이라고 결론지었다. 그래서 적당한 이름을 하나 만들어 붙였더니, 아 글쎄, 다들 좋아하더라고.
  — 마틴 파울러

POJO라는 용어는 이후에 주로 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않은 자바 오브젝트를 지칭하는 말로 사용되었다. 스프링 프레임워크는 POJO 방식의 프레임워크이다.

 

 

스프링은 내부에서 객체 간의 관계를 구성.

이 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO의 구성만으로 가능하도록 제작.

-> 일반적인 Java 코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있다는 이야기

 

의미?

- 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너 기술에 종속적이지 않다.

- 개발자는 가장 일번적인 형태로 코드를 작서앟고 실행할 수 있기 때문에 생산성에서도 유리

- 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수 있음.

 

반응형
반응형

본 내용은 이지업 사이트의 스프링부트 SNS프로젝트 - 포토그램 만들기 강의를 들은 내용을 기반으로 작성하였습니다.

 

Spring Boot는 Servlet으로 만들어져 있습니다.

 

Servlet이란?

- 서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바(Java)로 작성된 프로그램을 말한다.

- Java로 매핑할 수 있는 기술

 

예시로 

 

로그인 요청 -> Login.java

회원가입 요청 -> Join.java

게시물 쓰기 -> write.java

 

이렇게 요청의 갯수에 따라 Java파일(Servlet 파일)이 필요하다.

이는 매우 비효율적이다. 이것을 보완하기 위해 Controller를 사용한다고 생각하면 된다. Controller를 사용하면 아래와 같은 구조.

 

모든 요청을 FrontController.java에서 받고 있다.

여기에는 또 문제가 존재한다. 요청이 엄청나게 많아진다면 한 Controller에서 그 요청을 다 받는 것은 좋은 구조가 아니다.

그렇다면 어떻게 해야하는가?

 

Dispatcher를 통해 Domain 별로 분기해주고 Controller를 이용하여야 한다.

스프링 부트의 경우 Dispatcher가 이미 만들어져있고, 사용자는 Controller만 만들고  적절하게 사용하면 된다.

반응형

'Programming > Spring' 카테고리의 다른 글

DI(Dependency Injection) 이란?  (0) 2021.08.26
POJO란?  (0) 2021.08.26
YML/YAML 파일이란 무엇인가?  (0) 2021.08.11
SPRING과 SPRING BOOT의 차이점  (0) 2021.08.01
[spring boot] http 요청 file로 응답  (0) 2021.06.15
반응형

YAML을 시스템 간 데이터를 주고 받을 때, 사용하는 포맷 중 하나이다.

 

우리는 타 시스템 간에 데이터를 주고 받을 때, 데이터 포맷에 대한 약속이 필요하다. 시스템을 개발하거나 내부시스템끼리는 규칙을 만들어 지킬 수 있다. 하지만 문제는 타 시스템과 연동 할 때 발생한다.

내부에서 세운 규칙을 타 시스템과 데이터를 주고 받을 때마다 데이터 규칙에 대한 문서를 주고 받는다면 문서들도 많아지고 비효율적이게 된다. 그래서 XML, Json과 같은 데이터 포맷을 정의하여 사용하고 있고 그 포맷에는 규칙도 있다.

 

가장 오래 사용된 포맷은 XML이다.

xml 포맷 형식

XML은 태그형식을 통해 Key-Value를 구분하고, 태그안에 태그를 넣어서 부모와 자식관계의 구조를 나타낸다.

Object와 Array 부분은 표시를 해놨지만 Xml포맷상으로는 구분이 안되는 부분도 있다.

 

다음은 똑같은 내용의 JSON 포맷이다.

JSON 포맷 형식

XML포맷과 비교해 보았을 때, 훨씬 간소화된 느낌을 받을 수 있다.

Object 일 경우, {}로 감싸주고

Array일 경우, []로 감싸주는 형식이다.

Key값의 경우 XML 은 앞 뒤로 두번씩 들어가는데 JSON에서는 한번씩 들어가서 더 간결하다.

그런데도 {}, [], "" 같은 문자들이 불필요하게 많이 들어간 느낌이 있다.

 

다음은 YAML이다. 야믈(?)이라고 읽고, yml이라고 쓴다.

yml 포맷 형식

-(하이픈)을 통해서 Array임을 알 수 있다.

YAML이 딱 봐도 다른 포맷들보다 깔끔하다고 느낄 수 있다.

 

마지막으로 3가지 가독성 비교.

3가지 포맷 비교

따로 볼 땐 잘 몰랐는데 확실히 YAML이 깔끔해 보인다. YAML 포맷은 현재 많은 곳에서 사용되고 있다. 많은 사람들이 개발 시스템 설정 파일을 예전에는 config.properties를 사용했는데 현재는 config.yml로 많이 쓰는 추세이다. 참고로 쿠바네티스에서도 API를 전송할 땐 JSON 규격도 사용하지만 일반적으로는 YAML을 권장한다.

반응형
반응형

SPRING FRAMEWORK

스프링 프레임워크(Spring Framework)는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고도 불린다. 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있다. 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 쓰이고 있다.

장점

  • 경량 컨테이너
  • IoC(Invertion of Control : 제어 역행)
  • DI(Dependency Injection : 의존성 주입)
  • AOP(Aspect-Oriented Programming : 관점지향 프로그래밍)

SPRING BOOT

스프링 프레임워크는 기능이 많은만큼 환경설정이 복잡하다. 이에 어려움을 느끼는 사용자들을 위해 나온 것이 바로 스프링 부트다. 스프링 부트는 스프링 프레임워크를 사용하기 위한 설정의 많은 부분을 자동화하여 사용자가 정말 편하게 스프링을 활용할 수 있도록 돕는다. 스프링 부트 starter 디펜던시만 추가해주면 바로 API를 정의하고, 내장된 탐캣이나 제티로 웹 어플리케이션 서버를 실행할 수 있다. 심지어 스프링 홈페이지의 이니셜라이저를 사용하면 바로 실행 가능한 코드를 만들어준다. 실행환경이나 의존성 관리 등의 인프라 관련 등은 신경 쓸 필요 없이 바로 코딩을 시작하면 된다. 그리고 바로 그것이 스프링의 키 포인트이다.

Spring Boot가 Spring Framework와 다른점.

  1. Embed Tomcat을 사용하기 때문에, (Spring Boot 내부에 Tomcat이 포함되어 있다.) 따로 Tomcat을 설치하거나 매번 버전 관리를 해주어야 하는 수고를 덜 수 있다.
  2. starter을 통한 dependency 자동화:
  • Spring framework 에서는 각각의 dependency들의 호환되는 버전을 일일이 맞추어 주어야 했고, 때문에 하나의 버전을 올리고자 하면 다른 dependency에 까지 영향을 미쳐 version 관리에 어려움이 많았다. 하지만, 이제는 starter가 대부분의 dependency를 관리해주기 때문에 이러한 걱정을 많이 덜게 되었다.
  1. XML설정을 하지 않아도 된다.
  2. jar file을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다.
  • Spring Actuaor를 이용한 애플리케이션의 모니터링과 관리를 제공한다.

Spring Boot Starter란?

starter란 특정 목적을 달성하기 위한 의존성 그룹이라고 생각하면 이해가 쉽다. starter는 마치 npm처럼 간편하게 dependency를 제공해주는데, 만약 우리가 JPA가 필요하다면 prom.xml(메이븐)이나 build.gradle(그레이들)에 'spring-boot-starter-data-jpa'만 추가해주면 spring boot가 그에 필요한 라이브러리들을 알아서 받아온다.

spring-boot-starter-*

starter의 명명 규칙은 위와 같다. JPA 예시에서 알 수 있듯이 *부분에 원하는 스사터명을 명시하면 된다. 명명 규칙을 알면 손쉽게 원하는 라이브러리를 import 할 수 있다.

 

 

 

출처 - https://velog.io/@courage331/Spring-%EA%B3%BC-Spring-Boot-%EC%B0%A8%EC%9D%B4

반응형
반응형
 
이 글은 이지업 -포토그램 만들기 수업을 듣고 작성하였습니다.

 

  1. .txt 파일 응답하기
  1. 스프링부트가 지원하는 .mustache 파일 응답.
  1. 스프링부트가 버린 .jsp 파일 응답

 

jsp 파일 동작 과정

.jsp 파일의 동작 과정은 위 그림과 같다.

우리가 사용하는 톰켓이 템플릿엔진(.mustache, .jsp)에 포함된 java코드를 해석해서 HTMl 페이지로 응답한다.

 

 

1. .txt파일 응답하기.

HttpRespController.java를 생성하여 아래 코드를 작성한다.

이 때 @Contorller를 써야하는데 그 이유는 파일을 리턴할 것이기 때문이다.

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller // 파일을 리턴해줄 것이기 때문.
public class HttpRespController {

	@GetMapping("/txt")
	public String txt() {
		return "a.txt";
	}
}

 

src/main/resources/static에 a.txt를 만들어준다. 그리고 마음대로 글을 작성해준다.

위 경로에 작성하는 이유는 우리가 프레임워크를 사용중이기 때문이다. 프레임워크는 틀이 정해져 있다.

- 일반 정적 파일들은 resources/static 폴더 내부가 default 경로이다.

This is a.txt

 

그 후 서버를 실행해 크롬에서 페이지를 호출해본다. (Get방식이기 때문에 웹에서 확인 가능)

 

text 파일의 내용을 그대로 불러오는 것을 확인할 수 있다.

 

2. .mustache 파일 응답.

https://mvnrepository.com/ 접속 (java 관련된 라이브러리가 다 모여있다.)

mustache 검색 후 Spring Boot Starter Mustache 클릭.

 

제일 최신 버전 (현재 2.5.0) 들어가서 Maven 안에 코드 복사.

 

복사한 코드를 pom.xml의 dependencies 아래 복사해준다.

이 때, 버전부분은 지우고 정령해준 후 저장하여 적용해준다.(저장하면 자동 적용.)

그 후 서버를 껐다가 다시 켜준다.

 

 

그리고 static에 b.mustache 파일을 만들어 준다.

이 때, .mustache 형식은 따로 존재하지 않으므로, 먼저 html파일로 만든 후, 그 파일을 .mustache로 만든다.

그리고 아래와 같이 테스트 코드를 작성.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>This is mustache</h1>
</body>
</html>

 

Controller로 가서 mustache를 불러오는 코드를 작성해주자.

@GetMapping("/mus")
public String mus() {
	return "b.mustache";
}

 

그리고 크롬에서 확인해보면 이번엔 페이지가 뜨지 않고 파일이 다운로드 되는 화면을 볼 수 있다.

 

이는 웹 브라우저가 해석을 하지 못했기 때문이다. 즉, 톰캣 쪽에서 해석이 작동하지 않았다는 말이다.

그러면 어떻게 해결해야할까?

먼저, b.mustache 파일의 경로를 static에 templates로 옮겨준다

그리고 controller 코드에서 b.mustache의 확장자인 .mustache를 지운다.

@GetMapping("/mus")
	public String mus() {
		return "b";
	}

 

그리고 다시 웹에서 결과 확인하면 아래와 같다.

 

 

3. .jsp 응답하기.

https://mvnrepository.com/ 접속

jasper 검색 → Tomcat Jasper » 9.0.41 dependency 추가 → 기존 mustache dependency 주석처리(두 개 동시에 의존성 주입하면 충돌.)

 

src/main/ 아래 webapp/WEB-INF/views 폴더 생성해서 c.jsp 파일 만들어서 아래 코드를 작성해준다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>This is c.jsp</h1>
</body>
</html>

 

그리고 Controller 단에서 c.jsp를 불러오는 파일을 작성해준다. 근데 jsp은 기본적으로 스프링 부트에서 제공하지 않으므로 읽어오지 못한다. .mustache처럼 불러오기 위해서는 다른 설정을 해줘야한다.

먼저, application.properites 파일을 이름 변경해서 application.yml로 바꿔준다.

그리고 아래 코드를 작성해준다.

spring:
  mvc:
    view:
      prefix: WEB-INF/views/
      suffix: .jsp

 

jsp엔진 사용. src/main/webapp 폴더가 디폴트 경로!

prefix와 suffix를 통해 경로를 만들어줌.(view resolver가 이 역할을 수행)

이제 .jsp 파일도 정상적으로 읽어올 수 있다. 웹 브라우저를 통해 결과를 보면

 

.jsp 파일도 잘 읽어오는 것을 확인할 수 있다.

 

 

 

반응형

+ Recent posts