본문 바로가기

전체 글36

json형태로 문자열 보낼 때 외부API로 json안에 content를 담아 통신할 때가 있다. 예로 문자서비스를 이용할 때가 있는데 주의해야할 점이 있다. 문자서비스 내용안에 쌍따옴표(”) 가 들어가는 경우가 바로 그 점인데, 만약 서버단에서 String 형식으로 내용을 지정해서 보내는 경우 \” 로 쌍따옴표를 넣고 json형식으로 보내는 경우에는 해당 쌍따옴표를 json의 구분자로 인식 할 수가 있다. 따라서 \\\” 으로 넣어주거나 해야한다. 위의 경우는 내용이 정해져있지만, 만약 사용자가 입력해서 전송을 한다면? 똑같이 json형식의 값을 String 에 담아 보낸다면 서버단에서 별도의 작업을 해줘야 할 것이다.(ex: replace) 해당 작업이 귀찮다면 방법은 API통신을 String 형식으로 하지말고, JSONObject.. 2023. 4. 22.
Parameter AES암호화 해서 이용 할 때 주의할 점 개발할 때 URL 상에 index를 AES암호화해서 사용 할 때가 있다. 서버에서 AES 암호화시킨 URL로 redirect하거나 화면상에서 클릭해서 이동하면, 잘 이동하긴할 때도 있고, 에러가 뜨는 경우가 있다. 페이지를 찾지 못한다는 에러가 뜨는데 이때 URL을 살펴보면 공백이나 '=' 과 같은 특수문자가 들어가있는데 이는URLEncoding이 안되어 있어서다. 따라서 Encoding을 해주면된다. 서버쪽에서는 리다이렉트전에 encUid = URLEncoder.encode(encUid,"UTF-8"); 만약 script쪽에서 동적으로 생성하거나 할때면 encodeURIComponent(encUid) 하면 된다! 2023. 4. 22.
[#10] Spring 파헤치기 : 회원 리포지토리 테스트 케이스 작성 이제 내가 만든 회원 리포지토리가 정상적으로 작동하는지 테스트 케이스를 만들어보자. 개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드를 통해 실행하거나, 웹 애플리케이션의 컨트롤러를 통해서 해당 기능을 실행할 수 있다. 그러나 이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고, 여러 테스트를 한번에 실행하기 어렵다는 단점이 있다. 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다. src/test/java 하위폴더에 생성한다. 1. @Test 어노테이션 달기 테스트 케이스의 메서드는 @Test를 달아서 테스트용이라는것을 알려준다. 2. save() 테스트하기 - member 객체를 하나생성한다. - member객체에 setName으로 "spring.. 2022. 3. 24.
[#9] Spring 파헤치기 : 회원 도메인과 리포지토리 만들기 1. domain 패키지를 만들고 Member 클래스를 생성한다. package hello.hellospring.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } name은 사용자가 입력하고, id는 서버에서 name을 구분하기위해 자동으로 생성한다. 2. repository 패키지를 생성하고 MemberRepositor.. 2022. 3. 2.
[#8] Spring 파헤치기 : 회원 관리 예제(비즈니스 요구사항 정리) 무언가를 개발할 때 가장 먼저 해야하는 비즈니스 요구사항을 정리해보자. 1. 데이터 : 회원ID, 이름 2. 기능 : 회원 등록, 조회 3. 아직 데이터 저장소가 선정되지 않음(가상의 시나리오) 개발을 시작하기전에 웹 애플리케이션의 계층 구조를 먼저 알아보자. 1. 컨트롤러 : 웹 MVC의 컨트롤러 역할 2. 서비스 : 핵심 비즈니스 로직 구현 예) 회원 중복가입 불가 3. 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 4. 도메인 : 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 다음으로 클래스 의존관계를 설정한다. 1. 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계 2. 데이터 저장소는.. 2022. 3. 2.
[#7] Spring 파헤치기 : API 이번엔 API로 구현하는 방법을 알아보자. API 란? : 애플리케이션 소프트웨어를 빌드하고 통합하기 위한 정의 및 프로토콜 세트인 애플리케이션 프로그래밍 인터페이스(Application Programming Interface)를 뜻한다. 그럼 Spring에서 API 방식은 언제, 어떻게, 왜 사용할까? 앞서 살펴봤던 정적 컨텐츠나 MVC 방식은 주로 String을 반환하여 구현할 때 사용했다. 하지만 내가 객체를 반환하여 사용하고 싶으면 어떻게 할까? 그때 사용하는 방식이 API 방식이다. 사용방법은 @ResponseBody Annotation을 Controller에 붙혀서 사용한다. @ResponseBody란? : HTTP에서 Body부에 해당 데이터를 직접 넣어주겠다 라는 태그. 해당 코드를 살펴보.. 2022. 3. 2.
[#6] Spring 파헤치기 : MVC와 템플릿 엔진 앞서 핸들러와 템플릿 엔진을 조금 알아봤지만, 이번에 좀 더 알아보도록 하자. MVC란? : Model, View, Controller의 줄임말이다. Model은 데이터와 정보를 나타낸다. View는 화면을 그려내는부분, 즉 사용자 인터페이스요소를 나타낸다. Controller는 Model과 View를 연결해주는 다리역할이라고 보면된다. 이렇게 나눠서 작업을 하는이유는 만약 분리가 안되어있다면 나중에 유지보수를 하기위해선 전체를 들여다봐야 하기때문에 각각의 역할에 따라 작업을 진행하는것이다. HelloController에 다음과 같은 Controller를 추가하자. @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String n.. 2022. 2. 25.
[#5] Spring 파헤치기 : 정적 컨텐츠 정적 컨텐츠란? : 데이터의 변화가 없는 컨텐츠. 즉 말그대로 데이터의 움직임이 없는 정적인 컨텐츠이다. 사실 정적컨텐츠는 앞서 만든 Welcome Page 또한 정적컨텐츠라고 할 수 있다. src/main/java/resources/static 안에 hello-static.html 파일을 생성한뒤 다음과 같은 코드를 넣었다. 정적 컨텐츠 입니다. 그다음 서버를 실행시킨뒤에 주소창에 다음과 같이 입력한다. http://localhost:8080/hello-static.html 그럼 해당페이지가 정상적으로 나타나는데, 이 페이지는 데이터의 변화가 없기때문에 정적이다 라고 할 수 있다. 이렇게 코딩하면 프로그래밍을 할 수 없다. 만약 원하는 파일이 있다면 위의 파일경로에 원하는 파일을 추가하면 해당 파일의 .. 2022. 2. 24.
[#4] Spring 파헤치기 : 빌드하고 실행하기 먼저 빌드를 하기전에 Terminal 설정부터 변경해보자. 강의는 맥의 iTerm을 사용하고있는데, 난 윈도우를 사용중이라 Terminal을 변경해줘야한다. 윈도우는 기본적으로 명령프롬프트(cmd)를 사용중인데 이걸 Git으로 변경해서 사용하도록 설정해야한다. Git을 사용하는 가장 큰 이유는 nix계열의 OS에서 쓸 수 있는 명령어인 ssh, scp, cat, find등을 쓸 수 있기때문이다. 설정은 다음링크를 참고하자. 링크 : https://violetboralee.medium.com/intellij-idea%EC%99%80-git-bash-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0-63e8216aa7de IntelliJ IDEA와 Git Bash 연동하기 JetBrains .. 2022. 2. 24.
[#3] Spring 파헤치기 : View 환경설정 전에 메인메소드를 실행했을때 오류만 떴었다. 이번엔 WelcomePage를 작성해보도록하자. src - main - resources - static 안에 index.html을 생성한 뒤 Hello hello 를 입력하자. 그 다음 서버를 껐다 키면 이렇게 Welcome Page가 성공적으로 뜨게된다. 위에 Page는 정적인 기능이기때문에, 프로그래밍이라 보기어렵다. 동적으로 만들어보자. 1. Controller 생성 src - main - java - hello.hellospring 아래에 controller라는 package를 생성한 다음 그 안에 HelloController라는 class를 생성한다. 그 다음 안에 다음과 같이 작성한다. @Controller public class HelloCont.. 2022. 2. 24.
[#2] Spring 파헤치기 : 라이브러리 살펴보기 IntelliJ 프로젝트 하단에 External Libraries를 보면 내가 가져온적없는 수많은 라이브러리가 존재한다. 요즘에 애플리케이션개발을 위해선 이정도는 기본으로 땡겨와야만 가능하다고 한다.. Gradle은 의존관계를 다 관리를 해주는데, 예를들어 처음 Project생성시 가져왔던 starter-web을 땡긴다. 이 starter-web을 사용할때 필요한 모든 라이브러리를 땡겨온다. 그렇게 필요로 연결된 모든 라이브러리를 땡겨서 마지막엔 Spring Core까지 떙겨온다. 의존성으로 연결된 라이브러리는 우측에 Gradle을 클릭해서 확인가능하다. - org.springframework.boot:spring-boot-starter-tomcat:2.6.3 : 이 라이브러리는 우리가 이클립스에서 작업.. 2022. 2. 24.
[#1] Spring 파헤치기 : 프로젝트 환경설정 Spring Framework의 고수가 되기위한 첫 여정. 제일 중요한 환경설정부터 시작해보자 선행조건 : Java 11 설치 : IDE 설치 (InteliiJ or Eclipse) 1. 스프링 부트 스타터에서 스프링 프로젝트 생성하기 https://start.spring.io/ 위 사이트로 접속후 프로젝트에 대한 설정을 한다. 그 다음 Dependencies를 추가 GENERATE 클릭 2. IntelliJ IDEA 실행 Open 클릭 -> hello-spring\build.gradle 클릭 후 실행 4. build.gradle 확인 버전 설정과 라이브러리를 사용하기위한 환경을 확인 그 외 gradle파일은 나중에 확인 5. 프로젝트 실행 메인프로젝트 옆에 실행버튼을 누르면 정상적으로 실행되어야하는데 .. 2022. 2. 23.