Closed BJSNuruhee closed 9 months ago
✔ java, Spirng, Springboot에 대해서 서술해보세요.
java
Spring
Springboot
기존 Spring으로 개발할 때, 서버를 직접 설정해줘야 하는 불편함이 존재했으며, Spring의 기술들을 사용할 때에는 기술 간 버전 관리를 명확하게 해야 했었다.
이를 해결하기 위해 나온 것으로 서버가 내장되어 있으며, Spring 기술들의 버전 관리를 자동으로 해주어
빠른 개발을 가능하게 하였다.
✔ application.properties는 무슨 역할인가요?
✔ 로컬, 개발, 운영에 따라 application.properties를 나눠쓰고 싶은데 어떻게 하면 될까요? ( 실제 프로젝트에도 적용 바람)
✔ MVC 패턴에 대해서 간단하게 설명하세요
✔ DTO, DAO의 개념은 무엇인가요?
✔ Maven은 정확히 무엇을 뜻하고 뭘하는 걸까요?
✔ TestApplication.java와 TestApplicationTests.java의 차이
✔ pom.xml의 역할은 무엇이고 안에 구조는 어떻게 되어있을까요?
✔ npm과 node의 역할은 무엇인가요
✔ vue-cli란 무엇인가요?
✔ vite란 무엇인가요?
✔ vite.config.js 파일의 역할은?
✔ package.json 파일의 역할은?
✔ package-lock.json 파일의 역할은?
✔ index.js 파일의 역할은?
✔ main.js 파일의 역할은?
✔ App.vue와 index.html의 역할에 따라 클라이언트 요청과 프론트는 어떻게 구성이 되는가에 대한 라이프사이클 설명
✔ npm의 역할
기본적으로 언어라는 것은 OS에 종속되어 해당 환경에 맞추어 사용할 수 있다.
C언어의 경우 컴파일 과정을 거치면서 CPU가 읽을 수 있는 코드로 변환한다.
만약 C언어로 Linux에서만 돌아가는 프로그램을 만들었다고 해보자.
하지만 java는 JVM에 의해서 OS와 CPU에 종속되지 않고 가상의 환경에서 구동된다. (Virtual Machine)
이 때문에 환경에 구애받지 않고 어디서든 실행이 가능한 것이다.
가상화 라는 것은 소프트웨어로 CPU를 구현했다고 볼 수 있다.
그러므로 JVM은 CPU를 구현하여 독자적으로 구동을 하니 OS와 CPU에 종속되어있지 않다.
라고 할 수 있다.
Managed
이와 비슷한 개념으로 docker도 가상화를 통해 환경에 종속되지 않고 독자적으로 실행이 가능한 것이다.
어플리케이션당 오직 하나의 인스턴스만 존재하도록 보장해주는 패턴이다.
싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다
Singleton Beans
일반적으로 Singleton Object는 어플리케이션에서 글로벌하게 유일해야하지만, Spring에서는 이러한 제약이 완화된다.
Spring Framework가 하나의 Application Context당 하나의 Bean을 생성하는 것을 의미한다.
Autowired Singletons
기본적으로, Spring Framework는 모든 Bean들을 Singleton으로 생성한다.
Spring Controller에서 Autowired 하는 것이 바로 싱글톤 인스턴스를 생성하는 것이다.
ex) 단일 Application Context 내에서 두 Controller를 생성하고, 같은 타입의 Bean을 각각에 주입할 수 있다.
@Autowired : Spring Container에서 관리중인 Bean/자료형을 자동 맵핑해주는 어노테이션.
@RestController
public class LibraryController {
@Autowired
private BookRepository repository;
@GetMapping("/count")
public Long findCount() {
System.out.println(repository);
return repository.count();
}
}
@RestController
public class BookController {
@Autowired
private BookRepository repository;
@GetMapping("/book/{id}")
public Book findById(@PathVariable long id) {
System.out.println(repository);
return repository.findById(id).get();
}
}
원하는 객체를 생성하기 위해 추상 메서드가 있는 팩토리 클래스를 생성한다.
자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다.
각 객체를 추상 클래스 및 interface로 관리 할 수 있다는 장점이 있다.
일반적으로 프록시는 다른 무언가와 이어지는 인터페이스의 역할을 하는 클래스이다.
하나의 개체(프록시)가 다른 개체(주체 또는 서비스)에 대한 액세스를 제어할 수 있도록 하는 패턴이다.
장점
사이즈가 큰 객체(ex : 이미지)가 로딩되기 전에도 프록시를 통해 참조를 할 수 있다.
실제 객체의 public, protected 메소드들을 숨기고 인터페이스를 통해 노출시킬 수 있다.
단점
객체를 생성할 때 한 단계를 거치게 되므로, 빈번한 객체 생성이 필요한 경우 성능이 저하될 수 있다.
로직이 난해해져 가독성이 떨어질 수 있다.
예제 소스
Image.java(interface)
public interface Image {
void displayImage();
}
Real_Image.java
public class Real_Image implements Image {
private String fileName;
public Real_Image(String fileName) {
this.fileName = fileName;
loadFromDisk(fileName);
}
private void loadFromDisk(String fileName) {
System.out.println("Loading " + fileName);
}
@Override
public void displayImage() {
System.out.println("Displaying " + fileName);
}
}
Proxy_Image.java
public class Proxy_Image implements Image {
private Real_Image realImage;
private String fileName;
public Proxy_Image(String fileName) {
this.fileName = fileName;
}
@Override
public void displayImage() {
if (realImage == null) {
realImage = new Real_Image(fileName);
}
realImage.displayImage();
}
}
Proxy_Main.java
public class Proxy_Main {
public static void main(String[] args) {
Image image1 = new Proxy_Image("test1.png");
Image image2 = new Proxy_Image("test2.png");
image1.displayImage();
System.out.println();
image2.displayImage();
}
}
위의 예제를 보면 Proxy_Main에서 Real_Image에 직접 접근하지 않고 Proxy_Image 객체를 생성하여 대신 시킨다.
Proxy는 displayImage() 메서드를 호출하고 그 반환값을 Main에 반환한다.
어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴
디자인 패턴이라고 하기도 뭐할정도로 객체지향 언어로 개발을 하다보면 무의식적으로 사용하는 패턴이다.
장점
중복코드를 줄일 수 있다.
자식 클래스의 역할을 줄여 핵심 로직의 관리가 용이하다.
단점
추상 메소드가 많아지면서 클래스 관리가 복잡해진다.
클래스간의 관계와 코드가 꼬여버릴 염려가 있다.
예제 소스
//추상 클래스 선생님
abstract class Teacher{
public void start_class() {
inside();
attendance();
teach();
outside();
}
// 공통 메서드
public void inside() {
System.out.println("선생님이 강의실로 들어옵니다.");
}
public void attendance() {
System.out.println("선생님이 출석을 부릅니다.");
}
public void outside() {
System.out.println("선생님이 강의실을 나갑니다.");
}
// 추상 메서드
abstract void teach();
}
// 국어 선생님
class Korean_Teacher extends Teacher{
@Override
public void teach() {
System.out.println("선생님이 국어를 수업합니다.");
}
}
//수학 선생님
class Math_Teacher extends Teacher{
@Override
public void teach() {
System.out.println("선생님이 수학을 수업합니다.");
}
}
//영어 선생님
class English_Teacher extends Teacher{
@Override
public void teach() {
System.out.println("선생님이 영어를 수업합니다.");
}
}
public class Main {
public static void main(String[] args) {
Korean_Teacher kr = new Korean_Teacher(); //국어
Math_Teacher mt = new Math_Teacher(); //수학
English_Teacher en = new English_Teacher(); //영어
kr.start_class();
System.out.println("----------------------------");
mt.start_class();
System.out.println("----------------------------");
en.start_class();
}
}
Reference
@SpringBootApplication
어노테이션이 적용된 클래스로, 애플리케이션을 실행할 때 애플리케이션의 시작점이 된다.
@SpringBootApplication
어노테이션으로 인해 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성이 모두 자동으로 설정된다.
@SpringBootAplication
어노테이션이 있는 위치부터 설정을 읽어가기 때문에 이 어노테이션을 포함한 클래스는 항상 프로젝트의 최상단에 위치해야만 한다.
아래와 같이 코드를 보면 TestApplication.java는 Springboot와 관련된 속성을 가지고 있는 어노테이션이 적용되어 있다.
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
- 즉, 스프링부트를 실행시키기 위한 java 파일인 것이다.
이 파일은 주로 테스트 코드를 작성하는 데 사용되는 파일이다.
java의 대표적인 테스트 프레임워크인 JUnit을 사용할 수 있다.
@SpringBootTest
어노테이션을 사용하여 테스트 환경을 제공한다.
내부 어노테이션
본 퀴즈는 모르면 모른다고 적으면 되고, 굳이 검색을 해서 답을 적을 필요는 없음.
다음 퀴즈에서는 적지 못한 답에 대해 다시 질문할 것이니 부담감을 갖지 않기를 바람.
Springboot
java, Spirng, Springboot에 대해서 서술해보세요.
application.properties는 무슨 역할인가요?
로컬, 개발, 운영에 따라 application.properties를 나눠쓰고 싶은데 어떻게 하면 될까요? ( 실제 프로젝트에도 적용 바람)
MVC 패턴에 대해서 간단하게 설명하세요
DTO, DAO의 개념은 무엇인가요?
Maven은 정확히 무엇을 뜻하고 뭘하는 걸까요?
Vue
npm과 node의 역할은 무엇인가요
vue-cli란 무엇인가요?
vite란 무엇인가요?
vite.config.js 파일의 역할은?
package.json 파일의 역할은?
package-lock.json 파일의 역할은?
index.js 파일의 역할은?
main.js 파일의 역할은?
App.vue와 index.html의 역할에 따라 클라이언트 요청과 프론트는 어떻게 구성이 되는가에 대한 라이프사이클 설명
npm의 역할