//////
Search
🍒

[1026] Hash충돌해결, 코드리뷰, Springboot프로젝트생성, web으로 데이터 response하기

생성일
2022/11/10 07:58
태그
TodayILearn
Spring
생성일 1

코드 리뷰

package week6.hash; import java.util.ArrayList; public class HashTable3 { // 내장 클래스 class Node { private String key; private Integer value; Node(String key, Integer value){ this.key = key; this.value = value; } public String getKey(){ return this.key; } public Integer getValue(){ return value; } } // ArrayList<Node> 배열 // 배열의 크기: 1000 // 배열의 각 요소는 초기에 null (insert 메서드에서 ArrayList 생성) private ArrayList<Node>[] table = new ArrayList[1000]; // ASCII 코드로 해싱 처리 public int hash(String str) { int ascii = 0; for (int i = 0; i < str.length(); i++) { ascii += str.charAt(i); } return ascii % 1000; } // insert 메서드 public void insert(String key, int value) { int hashIdx = hash(key); // 초기에 해시 인덱스에 해당하는 요소가 null일 때 ArrayList<>() 생성 및 삽입 if (this.table[hashIdx] == null) { this.table[hashIdx] = new ArrayList<>(); } // 해당 해시 인덱스에 새 Node 생성 및 삽입 this.table[hashIdx].add(new Node(key, value)); } // key 값으로 value 가져오기 public Integer get(String key) { // 해당 key에 해당하는 ArrayList 가져오기 ArrayList<Node> nodes = this.table[hash(key)]; // for-each문을 돌면서 파라미터 'key'와 같은 값을 가진 Node를 탐색 for (Node node : nodes) { if (key.equals(node.getKey())) { return node.value; } } // value는 Integer 타입이므로, 탐색 실패시 null 반환 return null; } public static void main(String[] args) { HashTable3 ht = new HashTable3(); ht.insert("Yoonseo", 1); ht.insert("Seoyoon", 2); int result = ht.get("Yoonseo"); if (result == 1) { System.out.println("테스트 성공"); } else { System.out.printf("테스트 실패 value:%d", result); } result = ht.get("Seoyoon"); if (result == 2) { System.out.println("테스트 성공"); } else { System.out.printf("테스트 실패 value:%d", result); } } }
Java
복사

Spring Boot 빌드 및 설명

IntelliJ Ultimate

File > New > Project > Spring Initializr 에서 빌드
Language: Java
Type: Maven
이후, 설정에서 Web > Spring Web 체크
다음과 같은 파일이 빌드 된 것을 확인할 수 있음

IntelliJ Community

다음 링크의 사이트 접속하여 진행
Maven Project로 진행하여 다음 그림과 같이 설정 진행

빌드 후, 실행

실행 시, 다음과 같은 글을 확인할 수 있다.
이후, http://localhost:8080로 접속하면 다음과 같은 화면을 확인할 수 있다.

Maven - package 실행

package 더블 클릭 후 실행하면 다음과 같은 파일이 생성된 것을 확인할 수 있다.
Terminal에서 java -jar [파일이름] 명령어를 통해 실행시킬 수 있다.
jar파일은 개발한 소스코드가 실행가능 형태로 패키징 된 파일
pacakge를 하기 위해 아래 Life cycle을 거친다.

Springboot 동작 테스트와 API 작성하는 다양한 방법

스프링 부트에서 spring-boot-starter-web 모듈을 사용하면 기본적으로 톰캣(WAS 중 하나)을 사용하는 스프링 MVC구조를 기반으로 동작합니다.
참고

1. Hello Spring boot 출력하기

컨트롤러 작성

컨트롤러의 역할
컨트롤러에 포함된 로직들은 사용자/클라이언트가 입력한 값에 대한 응답Response 를 수행한다.
특별한 경우를 제외하고는 모든 요청이 컨트롤러를 통해 진행되어야 한다.
실습
Controller 패키지를 생성하고, HelloController.java 라는 이름의 컨트롤러를 생성한다.
import org.springframework.web.bind.annotation.*; @RestController public class HelloController { @RequestMapping("/hello") public String hello() { return "Hello World"; } }
Java
복사
@RestController, @RequestMapping(“path”)
1) @RestController - dispatcherServlet이 매핑해줄 Controller를 등록
2) @RequestMapping - controller가 할당 된 후 어떤 method를 실행할지 연결해주는 어노테이션 입니다. ex) path “/hello” 를 통해 hello 메소드 실행함을 알려주었다.

애플리케이션 실행

Spring boot 프로그램 실행
(WAS) 서버가 포함되어 있기 때문에 서버가 같이 실행된다.
실행을 누르면 아래와 같이 8080번 포트를 통해 웹 서버가 열린 것을 확인할 수 잇다.

웹 브라우저를 통한 동작 테스트

웹 브라우저로 스프링 부트가 설정한 URL에 접속하면 간단하게 실행 결과를 확인할 수 있다.

2. API 작성

Talend API Tester을 통한 동작테스트

Chrome 확장 도구에서 추가할 수 있다
API를 만들고 테스트 할 수 있는 Tool.
특히 웹브라우저에서는 Post테스트가 안되기 때문에 API Tester 툴을 쓴다.
Get형식
Post형식

@RequestMapping 어노테이션

별다른 설정 없이 선언하면 HTTP의 모든 요청을 받는다.
그러나 GET형식의 요청만 받기 위해서는 별도 설정이 필요하다.
방법1
@RequestMapping 어노테이션의 method 요소 값을 RequestMethod.Get으로 설정
@RestController @RequestMapping("/api/v1/get-api") public class HelloController { @RequestMapping(value = "/hello", method = RequestMethod.GET) public String hello() { return "Hello World"; } }
Java
복사
방법 2
어노테이션 @GetMapping() 사용
각 HTTP메서드에 맞게 또다른 어노테이션도 사용할 수 있다
@RestController @RequestMapping("/api/v1/get-api") public class HelloController { @GetMapping(value = "/name") public String getName() { return "Jung sang hee"; }
Java
복사

@PathVariable을 활용한 Get 메서드 구현

주소의 path를 통해 variable을 넘기고 싶을 때 사용한다.
메소드 로직1
@GetMapping(value="variable1/{variable}") public String getVariable1(@PathVariable String variable){ return variable; }
Java
복사
ex) 숫자 0을 넘기고 싶으면 http://localhost:8080/api/v1/get-api/variable1/0
메소드 로직2
어노테이션에서 지정한 이름과 메서드 매개변수 이름을 동일하게 맞추는게 원칙이지만,
@PathVariable 뒤에 괄호를 열어 GetMappgin어노테이션의 변수명을 지정한다.
@GetMapping(value="variable2/{variable}") public String getVariable2(@PathVariable(value="variable") String var){ return var; }
Java
복사
어노테이션 @GetMapping과 @PathVariable로 값이 잘 넘겨진 것을 확인할 수 있다.