💡 학습 내용
1. 웹의 기본 개념
2. 자바(Java) 기본 문법
3. 클래스(Class), 메소드(Method), 멤버(Member)
4. 스프링 작동 방법
5. 컨트롤러(Controller)
6. 그레이들(Gradle)
클라이언트와 서버로 구분이 된다. 클라이언트에서 원하는 데이터가 있을 때마다 서버에 요청하고, 응답 데이터를 받아 사용자에게 보여준다.
클라이언트 - 사용자가 보는 화면
서버 - 원하는 데이터가 있는 곳, 원하는 데이터를 요청하면 이에 응답해 주는 곳
프로그래밍 언어, Java는 거의 웹개발 서버에만 사용하고 있음.
웹서버에는 압도적으로 많이 쓰고 있음
자바라는 언어로 서버를 만드는데 필요한 것, 이미 필요한 것들이 만들어져 있고 우리는 필요한 것만 채우는 것!
스프링 시작 전 항상 다운받고 시작할 것들!
하나의 약속, 정해진 대로 요청을 하면 정해진 결과물을 돌려주는 것
데이터를 요청하고 받아서 보여주는 것!
뼈대에 해당하는 것이 HTML
뼈대에 색을 입히는 것 CSS
페이지를 움직이게 만들어 주는 것, 동적으로 만들어 주는 것 JavaScript
=> 클라이언트가 요청을 하면 3가지 모두 받아오는 경우
데이터만 받아오는 경우가 더 많다.
JSON 형식으로 데이터를 받아온다.
스프링은 "서버"를 담당한다.
요청에 따라 눈에 보이는 것들 또는 데이터를 제공해줌
스프링은 자바 언어를 바탕으로 만들어짐!
package com.sparta.week01.prac;
public class Prac {
public static void main(String[] args) {
System.out.println(); // 'sout' + Enter ot Tab
System.out.println("hello, sparta!");
}
}
package com.sparta.week01.prac;
import org.aspectj.weaver.ast.Test;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
public class Prac {
public static void main(String[] args) {
// 1. 화면에 나타내기
System.out.println(); // 'sout' + Enter ot Tab
System.out.println("hello, sparta!");
// 2. 변수
String myName = ""; // 변수 표기법 CamelCase
// 숫자
int a = 7; // 정수
int b = 3; // 싷수
System.out.println(a + b);
float c = 3.7f;
System.out.println(c);
int n = 1000000000;
Long d = 10000000000L;
System.out.println(d);
// 문자열
String name = "김소영"; // 변수 표기법 CamelCase
String name2 = "김도영";
System.out.println(name + name2);
// boolean
int myAge = 20;
boolean isAdult = myAge > 20;
boolean isKid = myAge > 20;
System.out.println(isAdult);
System.out.println(isKid);
System.out.println(myAge == 20); // true
System.out.println(myAge != 20); // false
boolean isTest = true;
// 배열 List
// 1) 순서가 중요
// 2) 같은 자료형만 넣을 수 있음
// 3) 넣을 때는 add, 조회할 때는 get, 제거할 때는 remove 사용
List<String> myList = new ArrayList<>(); // List 선언
String course1 = "Spring";
String course2 = "React";
myList.add(course1);
myList.add(course2);
System.out.println(myList);
System.out.println(myList.get(1));
myList.remove(1);
System.out.println(myList);
// 3. import
// List 처럼 미리 작성된 코드를 불러오는 것
// 4. 주석 Ctrl + /
// 5. 정렬 Ctrl + Alt + L
// Example
String co1 = "Web";
String co2 = "App";
List<String> coList = new ArrayList<>();
coList.add(co1);
coList.add(co2);
System.out.println(coList);
}
}
반복적인 행동을 줄여서 어디든 갖다 쓸 수 있는 명령 모음
ackage com.sparta.week01.prac;
public class Prac {
public static void printInfo() {
String title = "Hello";
String name = "Soyeong";
int weeks = 1;
float ratings = 5.0f;
System.out.println("title: " + title);
System.out.println("name: " + tutor);
System.out.println("weeks: " + weeks);
System.out.println("ratings: " + ratings);
}
public static void main(String[] args) {
printInfo();
}
}
메소드의 구조
public (return type) methodName(parameters) {
// ...
return (return value)
}
package com.sparta.week01.prac;
public class Prac {
// 파라미터 X, 반환값 X
public static void simplePrint() {
System.out.println("파라미터도 없고, 반환값도 없어요!");
}
// 파라미터 O, 반환값 X
public static void simpleSum(int num1, int num2) {
System.out.println("num1 :" + num1 + ", num2: " + num2);
}
// 파라미터 X, 반환값 O
public static int simpleReturn() {
return 3;
}
// 파라미터 O, 반환값 O
public static int sum(int num1, int num2) {
return num1 + num2;
}
public static int sub(int num1, int num2) {
return num1 - num2;
}
public static void main(String[] args) {
simplePrint();
simpleSum(2,3);
System.out.println(simpleReturn());
System.out.println(sum(2, 3));
System.out.println(sub(5, 2));
}
}
메소드명은 변수명과 규칙(영어사용, 소문자시작, 공백없음, 대문자구분)이 같음
package com.sparta.week01.prac;
import java.util.ArrayList;
import java.util.List;
public class Prac {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("감");
fruits.add("배");
fruits.add("감");
fruits.add("딸기");
fruits.add("수박");
fruits.add("메론");
fruits.add("수박");
fruits.add("딸기");
fruits.add("메론");
fruits.add("수박");
fruits.add("메론");
fruits.add("수박");
fruits.add("감");
System.out.println(fruits);
for (int i=0; i<fruits.size(); i++) {
String fruit = fruits.get(i);
System.out.println(fruit);
}
}
}
package com.sparta.week01.prac;
public class Prac {
public static void main(String[] args) {
int age = 20;
if (age > 19) {
System.out.println("Adult.");
} else {
System.out.println("Nope.");
}
}
}
package com.sparta.week01.prac;
import java.util.ArrayList;
import java.util.List;
public class Prac {
public static int countFruit(String fruit, List<String> fruits) {
int count = 0;
for (int i = 0; i < fruits.size(); i++) {
if (fruits.get(i).equals(fruit)) {
count += 1;
}
}
return count;
}
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("감");
fruits.add("배");
fruits.add("감");
fruits.add("딸기");
fruits.add("수박");
fruits.add("메론");
fruits.add("수박");
fruits.add("딸기");
fruits.add("메론");
fruits.add("수박");
fruits.add("메론");
fruits.add("수박");
fruits.add("감");
System.out.println(countFruit("수박", fruits));
}
}
정보를 묶는 것!
-코드를 현실과 비슷한 개념으로 나타내기 위해
Prac.java
package com.sparta.week01.prac;
import java.util.ArrayList;
import java.util.List;
public class Prac {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
Course course = new Course();
course.title = "웹개발의 봄, Spring";
System.out.println(course.title);
System.out.println(course.tutor); // null
Course course2 = new Course("React", "James", 20);
System.out.println(course2.title);
System.out.println(course2.tutor);
System.out.println(course2.days);
}
}
Course.java
package com.sparta.week01.prac;
public class Course {
// title, tutor, days 가 Course 라는 맥락 아래에서 의도가 분명히 드러나죠!
public String title;
public String tutor;
public int days;
// 기본생성자 - Java에서 기본적으로 생성해줌. (생성자를 선언 안한 경우)
public Course() {
}
// 생성자
public Course(String title, String tutor, int days) {
this.title = title;
this.tutor = tutor;
this.days = days;
}
}
클래스의 모든 정보를 손쉽게 바꿀 수 있으면 안됨.
public 밖에 드러내도 되는 것들
private 함부로 바꾸면 안되는 것들
package com.sparta.week01.prac;
public class Course {
private String title;
private String tutor;
private int days;
public Course(String title, String tutor, int days) {
this.title = title;
this.tutor = tutor;
this.days = days;
}
}
private으로 선언을 하고 정해진 방법으로만 값을 바꿀 수 있도록 하는 것 => setter
Course.java
package com.sparta.week01.prac;
public class Course {
private String title;
private String tutor;
private int days;
public Course() {
}
public Course(String title, String tutor, int days) {
this.title = title;
this.tutor = tutor;
this.days = days;
}
// Setter
public void setTitle(String title) {
this.title = title;
}
public void setTutor(String tutor) {
this.tutor = tutor;
}
public void setDays(int days) {
this.days = days;
}
// Getter
public String getTitle() {
return this.title;
}
public String getTutor() {
return this.tutor;
}
public int getDays() {
return this.days;
}
}
Prac.java
package com.sparta.week01.prac;
import java.util.ArrayList;
import java.util.List;
public class Prac {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
Course course = new Course();
course.setTitle("Spring");
course.setTutor("Jane");
course.setDays(10);
System.out.println(course.getTitle());
System.out.println(course.getTutor());
System.out.println(course.getDays());
Course course2 = new Course("React", "James", 20);
System.out.println(course2.getTitle());
System.out.println(course2.getTutor());
System.out.println(course2.getDays());
}
}
Tutor.java
package com.sparta.week01.prac;
public class Tutor {
private String name;
private String bio;
// 기본 생성자
public Tutor() {
}
// 생성자
public Tutor(String name, String bio) {
this.name = name;
this.bio = bio;
}
public void setName(String name) {
this.name = name;
}
public void setBio(String bio) {
this.bio = bio;
}
public String getName() {
return this.name;
}
public String getBio() {
return this.bio;
}
}
데이터로 응답하려면, RestController 를 사용해야 한다.
서버의 응답이 JSON 형식임을 나타냄.
HTML, CSS 등을 주고받을 때는 Rest를 붙이지 않음.
누군가 말을 걸면 응답하는 것.
클라이언트의 요청(Request)를 전달받는 코드를 Controller 라고 함.
=> JSON만을 돌려주는 것은 RESTController라고 부름.
JSON 형식으로 응답하는 자동 응답기! => REST Controller
package com.sparta.week01.controller
위치
package com.sparta.week01.controller;
import com.sparta.week01.prac.Course;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CourseController {
@GetMapping("/courses")
public Course getCourses() {
Course course = new Course();
course.setTitle("Spring");
course.setDays(35);
course.setTutor("YoungKim");
return course;
}
}
브라우저에서 주소를 치는 행위를 GET 방식으로 정보를 요청
⇒ 다운로드받고 적용하는 과정을 간편하게 할 수 있음
https://mvnrepository.com/
build.gradle에 작성
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'mysql:mysql-connector-java'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// https://mvnrepository.com/artifact/org.json/json
implementation group: 'org.json', name: 'json', version: '20160810'
}