Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

과제 및 정리 완료 병합 요청 #8

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ plugins {

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
sourceCompatibility = '8'

repositories {
mavenCentral()
Expand Down
Binary file added docs/img.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 8 additions & 1 deletion docs/simple.md
Original file line number Diff line number Diff line change
@@ -1 +1,8 @@
# 이곳에 정리
# 이곳에 정리

## <span style="color:#ff5f4d"> private HelloDao helloDao의 문제점 </span>
만일, HelloDao가 아닌 더 좋은 기능을 하는 클래스를 사용해야 한다고 가정하자.
이때, HelloDao 형 필드 변수로 사용해왔었기 때문에, 이를 교체하기 위해서
필드 변수의 자료형을 전부 일일히 바꿔줘야 한다.
이를 해결하기 위해, 인터페이스 자료형으로 필드 변수를 지정해 두고,
인터페이스를 구현한 구현체를 활용해 의존성을 주입하는 방식을 이용(자바의 '다형성'이라는 성질 활용)한다.
24 changes: 23 additions & 1 deletion docs/think.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,27 @@
- Java를 사용하는 Server Framework가 Spring이라고요? 그럼 혹시 `Dropwizard`에 대해서는 알고 계신가요?

# 아래에 정리해 주세요!
### WAS와 Web Server의 차이를 알고 계신가요?
네, Web Server는 정적인 콘텐츠(HTML, 이미지 등)를 클라이언트에게 전달하는 역할을 주로 수행합니다.
반면에 WAS(Web Application Server)는 동적인 웹 애플리케이션을 실행하고 비즈니스 로직을 처리하는 서버입니다.
즉, WAS는 Web Server의 기능에 더해 데이터베이스 연동, 세션 관리 등 복잡한 작업을 수행합니다.
- 웹 서버
- 정의 : 정적인 콘텐츠(HTML, CSS, 이미지 등)를 제공하는 서버
- 기능 : HTTP 프로토콜을 이용해 클라이언트에게 웹 페이지 제공
- 주요 소프트웨어 : Apache, Nginx, IIS
- WAS 서버
- 정의 : 동적인 콘텐츠(웹 애플리케이션)를 처리하고 제공하는 서버
- 기능 : 웹 애플리케이션 실행 및 데이터 처리, 웹 서버와 클라이언트 간의 중계 역할
- 주요 소프트웨어 : Tomcat, JBoss, WebLogic, WebSphere
### 현대의 WAS는 Web Serving 능력이 출중하다고 합니다. 그런데도 왜 아직 둘을 나누는게 더 일반적일까요?
- 보안 강화: Web Server가 외부 요청을 필터링하고 WAS로 전달함으로써 보안 위협을 줄일 수 있습니다.
- 부하 분산: 정적 콘텐츠는 Web Server가 처리하고, 동적 콘텐츠는 WAS가 처리하여 시스템 부하를 효율적으로 관리할 수 있습니다.
- 유지보수 용이성: 각 서버를 독립적으로 관리하고 최적화할 수 있어 운영 효율성이 높아집니다.
- 스케일링 유연성: 트래픽 패턴에 따라 Web Server나 WAS를 개별적으로 확장할 수 있습니다.

> 정리 양식은 자유입니다! 몇 가지 주제에 대해서 알아오셨나요?
### 우리가 보는 화면은 Web Server를 활용(빠르고 안정적), 우리의 데이터 관리 등은 WAS를 활용하게 되는 것 같다.
### 유명한 웹 서버-Apache, WAS서버-Tomcat. 이 둘을 사용하므로써 서버 부하를 방지.
### Tomcat5.5부터 Apache기능을 포함하게 되서, Apache Tomcat이라고 부름.
### WAS서버를 재시작할 때, Web Server에서 WAS 사용을 제한하면 사용자들의 불편을 줄일 수 있다.
### 이를 [장애 극복 기능] 이라고 한다.
![img.png](img.png)
24 changes: 24 additions & 0 deletions src/main/java/nextstep/helloworld/HelloController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package nextstep.helloworld;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
private HelloDao helloDao;

public HelloController(HelloDao helloDao) {
this.helloDao = helloDao;
}

@GetMapping("/hello")
public String hello(@RequestParam(defaultValue = "") String name) {
if (name.isEmpty()) {
return "HelloWorld!";
}
helloDao.insert(name);
int count = helloDao.countByName(name);
return "Hello " + name + " " + count + "번째 방문입니다.";
}
}
28 changes: 28 additions & 0 deletions src/main/java/nextstep/helloworld/HelloDao.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package nextstep.helloworld;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


@Service
public class HelloDao {
private JdbcTemplate jdbcTemplate;

public HelloDao(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

@Transactional
public void insert(String name) {
String SQL = "INSERT INTO hello (name) VALUES (?)";
jdbcTemplate.update(SQL, new Object[]{name});
}

@Transactional
public int countByName(String name) {
String sql = "SELECT COUNT(*) FROM hello WHERE name = ?";
return jdbcTemplate.queryForObject(sql, Integer.class, name);
}
}
5 changes: 5 additions & 0 deletions src/main/resources/schema.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
create table hello(
id bigint auto_increment,
name varchar(255) not null,
primary key(id)
);