Spring 4개
1 (3점)
다음 중 Spring Framework에서 관리하는 Bean 객체를 만드는 어노테이션 아닌 것을 고르시오.
1.
@Controller
2.
@Configuration
3.
@ComponentScan
4.
@Bean
정답: 3번
2 (4점)
다음 중 Spring Framework의 IoC Container에 대한 설명으로 틀린 것을 고르시오.
1.
사용자가 정의한 Bean 객체를 관리한다.
2.
객체들 간의 의존성을 주입하여 결합도를 낮추는 역할을 한다.
3.
객체를 생성하지만, 소멸은 개발자가 직접 해주어야 한다.
4.
사용자가 다양한 방식으로 정의한 설정들을 관리하여, 객체를 만드는 방법을 결정한다.
정답: 3번
3 (3점) (주관식)
[ ]안에 들어갈 용어를 작성해주세요.(띄어쓰기 없이 한글로 작성할 것)
[ ]는 사용자의 HTTP 요청을 받고, 해당 요청에 알맞은 응답을 전달하는 서버를 지칭합니다. 이때 응답으로 정적 컨텐츠(html,css,js,image)를 제공합니다. [ ]의 예로 Apache Server, Nginx 등이 있습니다.
정답: 웹서버
4 (5점) (주관식)
다음 지문이 설명하는 것을, 띄어쓰기 없이 네글자 한글로 작성하시오.
프로그램 실행 흐름에 대한 제어가 개발자가 작성한 코드가 아닌 프레임워크로 전환되는 디자인 패턴의 일종으로, 응용 소프트웨어의 구성 요소를 분리하고 느슨한 결합을 촉진한다. Spring에서는 이 디자인 패턴을 적용하여, 개발자가 작성한 객체를 직접 생성하고, 생명 주기를 관리하며 필요한 지점에 주입해준다.
정답: 제어역전
HTTP 이론 3개
5 (3점)
HTTP에 대한 설명 중 틀린 것은?
1.
상태를 저장하지 않는 통신 규약이다.
2.
데이터가 안전하게 전송되는 방식을 정의한 통신 규약이다.
3.
요청은 Request Line, Request Header, Request Body로 이뤄져 있으며, 이중 Body는 선택사항이다.
4.
요청과 응답의 헤더는 부수적인 정보를 표현하기 위해 사용된다.
정답: 2번
6 (3점)
다음 주어진 상황에 알맞게 짝지어진 응답 코드를 모두 고르시오.
•
ㄱ: 200 - 인증이 필요없는 페이지를 요청하였을 때 HTML과 함께
•
ㄴ: 204 - 삭제 요청을 보내었는데 응답 데이터가 비어있을 때
•
ㄷ: 400 - 인증이 필요한 페이지에 인증 정보가 포함되지 않은 체 접근할 때
•
ㄹ: 501 - 서버에 예측하지 못한 에러 상황이 발생했을 때
1.
ㄱ, ㄴ
2.
ㄴ, ㄷ
3.
ㄷ, ㄹ
4.
ㄱ, ㄹ
정답: 1번
7 (2점)
다음 중 HTTP의 각 글자가 의미하는 바로 옳은 것을 고르시오
1.
HyperText Transaction Protocol
2.
HTml Transport Protocol
3.
HyperText Transfer Protocol
4.
Hype Type Translation Protocol
정답: 3번
HTTP 요청 응답 다루기 4개
8 (5점)
다음 클래스가 포함된 Spring Boot 애플리케이션이 http://localhost:8080에 실행중일 때, 아래의 요청을 보냈을 때 적절한 응답을 고르시오.
class LectureDto {
private Long id;
private String name;
private String day;
private Integer startTime;
private Integer endTime;
}
@Controller
@RequestMapping("lectures")
public class LectureController {
private final List<LectureDto> lectureList = new ArrayList<>();
@PostMapping
public List<LectureDto> addLecture(
@RequestBody
LectureDto dto
) {
this.lectureList.add(dto);
return this.lectureList;
}
}
Java
복사
요청:
POST /lectures
{
"name": "Database",
"statTime": 16,
"endTime": 17
}
Plain Text
복사
1.
[{ "name": "Database", "day": "mon", "startTime": 16, "endTime": 17 }]
2.
[{ "name": "Database", "day": null, "startTime": null, "endTime": 17 }]
3.
{ "name": "Database", "day": null, "startTime": null, "endTime": 17 }
4.
오류가 발생한다.
정답: 4번
풀이: @Controller 어노테이션이 붙은 클래스는 @RequestMapping 메소드의 응답을 View Resolver로 보내 특정 View를 사용하고자 하는데, 이 과정에서 this.lectureList 를 View로 표현할 수 없기 때문에 오류가 발생하게 됩니다.
9 (4점)
@(____) 어노테이션은 Spring Boot에서 엔드포인트를 구성하기 위해 사용하는 어노테이션으로, 해당 클래스 내부의 @RequestMapping 이 추가된 메소드에 자동으로 @ResponseBody 어노테이션이 추가되는 어노테이션이다. (골뱅이(@) 없이 대소문자에 유의하여 작성하시오.)
정답: RestController
10 (코드 위주) (4점)
다음 중 주어진 HTTP 요청에 대하여 실행되지 않는 메소드를 고르시오. (단, 해당 메소드가 정의되는 클래스에는 @RequestMapping 이 추가되어 있지 않다.)
GET /articles/1
Java
복사
1번
@RequestMapping("/articles/{id}")
public String getArticleId(){}
Java
복사
2번
@GetMapping("/articles/{id}")
public String getArticleId(@PathVariable("id") Long id){}
Java
복사
3번
@RequestMapping("/{entity}/{id}")
public String getArticle(@PathVariable("id") Long id){}
Java
복사
4번
@GetMapping("/articles/{id}/")
public String getArticleId(@PathVariable("id") Long id){}
Java
복사
정답: 4번
Spring의 RequestMapping 어노테이션으로 설정된 경로는 마지막 슬래시의 유무를 구분한다.
11 (코드 위주) (4점)
다음 사용자가 보낸 요청에 첨부된 x-likelion-monthly 헤더의 값을 메소드 내부에서 출력하고자 할때, 옳지 않은 것을 고르시오.
GET /exam/start
x-likelion-monthly: 2nd
Java
복사
1번
@GetMapping("/exam/start")
public String getHeaders(@RequestHeader HttpHeaders headers) {
System.out.println(headers.get("x-likelion-monthly");
}
Java
복사
2번
@GetMapping("/exam/start")
public String getHeaders(@RequestHeader Map<String, String> headers) {
System.out.println(headers.get("x-likelion-monthly");
}
Java
복사
3번
@GetMapping("/exam/start")
public String getHeaders(HttpServletRequest request) {
System.out.println(request.getHeader("x-likelion-monthly"));
}
Java
복사
4번
@GetMapping("/exam/start")
public String getHeaders(@RequestHeader("x-likelion-monthly") Integer targetIntHeader) {
System.out.println(headers.get("x-likelion-monthly");
}
Java
복사
정답: 4번
@RequestHeader 에 지정된 타입이 정수형이지만, 전달되는 데이터는 문자열로 해석해야 한다. 이 경우 잘못된 요청으로 판단하여 400 응답이 자동으로 발생한다.
Database 3개
12 (4점)
사용중인 데이터베이스(SQLite)에 다음과 같은 SQL을 실행했다.
DROP IF EXISTS ITEM;
CREATE TABLE ITEM(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
price INTEGER,
made_in TEXT
);
SQL
복사
이후 다음의 SQL 구문중, (IDE 등의 기능을 무시 하였을 때) 실행되지 않는 구문을 고르시오.
1.
SELECT DISTINCT made_in FROM ITEM;
2.
UPDATE ITEM SET MADE_IN WHERE price LIKE '1000';
3.
DELETE FROM ITEM;
4.
INSERT INTO ITEM(price, made_in) VALUES(1000, 'Lorem Ipsum');
정답: 4번
name 컬럼에는 NOT NULL 제약사항이 있기 때문에 INSERT 과정에 반드시 포함되어야 한다.
13 (3점)
다음 중 DML에 속하지 않는 SQL을 고르시오.
1.
DROP
2.
SELECT
3.
INSERT
4.
DELETE
정답: 1번
DROP은 DML이 아닌 DDL에 속한다.
14 (2점)
다음 중 SQL의 분류에 해당하지 않는 것을 고르시오.
1.
DDL - Data Definition Language
2.
DML - Data Manipulation Language
3.
DCL - Data Control Language
4.
DGL - Data Generation Language
정답: 4번
DGL은 SQL의 분류에 속하지 않는다.
JPA 3개
15 (5점)
다음 주어진 Entity 객체들을 보고, 생성된 테이블들의 모습에 대한 설명 중 알맞은 것을 고르시오.
@Entity
public class Shop {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
@OneToMany(mappedBy = "shop")
private List<ShopItem> items;
}
Java
복사
@Entity
public class ShopItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
private Integer price;
@ManyToOne
private Shop shop;
@ManyToMany(mappedBy = "items")
private List<Customer> customers;
}
Java
복사
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String phone;
private String email;
@ManyToMany
@JoinTable(
name = "customer_order",
joinColumns = @JoinColumn(name = "customer_id"),
inverseJoinColumns = @JoinColumn(name = "item_id")
)
private List<ShopItem> items;
}
Java
복사
1.
ShopItem 과 Customer 는 N:1 관계이다.
2.
Shop 인스턴스의 items 필드만 수정한 뒤 저장하게 될 경우, 해당 변경 사항이 데이터베이스에 반영된다.
3.
@Entity 클래스로 표현되지 않은 테이블이 생성된다.
4.
ShopItem 이 표현된 데이터베이스 테이블에는 shop 이라는 칼럼이 생성된다.
정답: 3번
16 (2점)
다음 주어진 어노테이션 중 Jakarta Persistence API에 정의되지 않은 어노테이션을 고르시오.
1.
@Data
2.
@Entity
3.
@Table
4.
@Column
정답: 1번
17 (3점)
다음 설명 중 JPA에 관련된 설명으로 옳지 않은 것을 고르시오.
1.
JPA는 자바 ORM 기술에 대한 API 표준 명세를 의미하며, ORM은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 말한다.
2.
Entity에 해당하는 클래스에서 특정 클래스를 상속하는 것으로 생성/수정일자를 자동으로 입력해주는 것이 가능하다.
3.
Hibernate는 JPA의 구현체에 해당한다.
4.
DB의 종류에 따라 내부적으로 사용되는 쿼리의 문법이 다르기 때문에 사용하는 DB가 변경된다면 Hibernate는 Repository의 코드를 변경해야 하는 불편함이 있다.
정답: 4번
REST 3개
18 (4점)
다음 중 REST 아키텍처에서 정의되어있는 제약사항과, 그 설명이 일치하지 않는 것을 고르시오.
1.
Stateless - 클라이언트가 보내는 요청은 자신을 어떻게 처리해야 하는지 충분한 정보를 담고 있어야 한다.
2.
Cacheability - 각 응답은 명시적, 또는 암시적으로 캐시가 가능한지가 정의되어 있어야 한다.
3.
Layered System - 요청을 받는 서버는 계층적 구조로 이뤄져 있어서 클라이언트가 어디로 요청을 보내는지 알아야 한다.
4.
Code on Demand - 실행 가능한 코드를 응답함으로서 일시적으로 클라이언트의 기능을 확장할 수 있다.
정답: 3번
19 (2점)
REST는 무엇의 줄임말인지 알맞은 것을 고르시오.
1.
REpresentational State Transfer
2.
REvolutionary Status Tags
3.
REndered State Transition
4.
RElational Stat Transaction
정답: 1번
20 (3점)
REST의 제약 조건 중 하나인 HATEOAS에 관한 설명으로 옳지 않은 것을 고르시오.
1.
클라이언트는 서버에서 제공한 정보를 이용하여 동적으로 서버가 제공할 수 있는 모든 정보를 확인할 수 있어야 한다.
2.
서버는 요청에 대한 응답에 다른 자원에 접근하는 방법을 묘사해야 한다.
3.
REST 서비스는 HATEOAS를 통해 애플리케이션의 자원의 상태를 나타낼 수 있는데, 상태를 나타내는 것은 HTTP 메소드이다.
4.
클라이언트는 서버의 응답에 나타낸 다른 자원에 접근하는 방법을 통해 이동할 수도 있어야 한다.
정답: 3번 - 상태를 나타내는 것은 하이퍼미디어(링크)이다. 이름 자체에서 드러남.
인증 인가 3개
21 (3점)
이것은 서버가 응답을 보낼 때 사용자의 브라우저로 함께 전달하는 작은 데이터로서, 상태를 저장하지 못하는 HTTP 요청을 인증받은 사용자가 보냈다는 것을 확인하기 위해 주로 활용한다. 이것은 무엇인지 작성하시오. (영어로, 소문자로만 작성, 대문자 포함 시 오답)
정답: Cookie
22 (3점)
다음 중 JWT에 대한 설명으로 옳지 않은 것을 고르시오
1.
토큰 기반 인증 방식에 많이 활용된다.
2.
JWT를 이용해 인증을 진행할 경우 필요한 요청에 JWT를 포함시키면 된다.
3.
내용을 해독하기가 어렵기 때문에 사용자 정보를 담기에 안전하다.
4.
Authorization 이라는 헤더에 포함해서 전송된다.
정답: 3번
23 (4점) 이론
다음 중 Spring Security에 대한 내용으로 옳지 않은 것을 고르시오.
1.
JWT의 위변조 상태를 감지하기 위한 암호키 준비 과정에서 application.yaml에 작성된 설정은 필드나 생성자 인자에 @Value 어노테이션을 통해 할당할 수 있다.
2.
SecurityFilterChain Bean은 다양한 상황의 인증 및 권한 절차를 처리하기 위한 필터들로 구성되어 있으며 커스텀으로 만든 Filter를 추가할 수도 있다.
3.
OAuth는 Open Authorization의 약자로, 다른 서비스 제공자를 통해 사용자의 정보를 안전하게 위임받기 위한 표준으로 OAuth 과정은 HTTP 통신과 Redirect를 활용해서 만들어지게 된다.
4.
Spring Security를 이용해 OAuth를 구현하고자 한다면 HTTP 통신하는 부분을 spring-boot-starter-oauth2-client 의존성을 활용해서 구현할 수 있지만 HTTP 통신하는 부분을 직접 만들수는 없다.
정답: 4번
Spring Security를 이용해 OAuth를 구현하고자 한다면 HTTP 통신하는 부분을 직접 만들거나, spring-boot-starter-oauth2-client 의존성을 활용해서 구현하게 됩니다. (교안 230711)
SQL 심화 2개
24 (5점)
다음은 두 개의 서로 다른 테이블에 다음과 같은 데이터가 들어가 있을 때, 주어진 SQL 구문을 실행한 결과이다. 이때 빈칸에 알맞은 SQL 절을 고르시오.
USER
ID | username | email |
1 | alex | alex@gmail.com |
2 | brad | brad@gmail.com |
3 | chad | chad@gmail.com |
4 | dave | dave@gmail.com |
ARTICLE
ID | writer | title |
1 | 1 | Hello! |
2 | 1 | I’m Studying Database |
3 | 2 | Me Too |
4 | 2 | What Language Do you use? |
5 | 4 | Aloha |
SELECT a.username, b.title
FROM USER as a (_____) ARTICLE as b
ON a.id = b.writer;
SQL
복사
username | title |
alex | Hello! |
alex | I’m Studying Database |
brad | Me Too |
brad | What Language Do you use? |
chad | null |
dave | Aloha |
1.
INNER JOIN
2.
LEFT OUTER JOIN
3.
RIGHT OUTER JOIN
4.
CROSS JOIN
정답: 2번
25 (4점)
다음 중 Database Table 제약사항이 아닌것을 고르시오.
1.
PRIMARY KEY
2.
NOT NULL
3.
FOREIGN KEY
4.
SEQUENCE
정답: 4번
SEQUENCE는 제약사항과는 별개로 일정하게 증가하는 데이터를 제공하기 위한 데이터베이스 내부 객체이다.
미정(암거나)
26 (2점)
[ ]안에 들어갈 용어를 작성해주세요. (띄어쓰기 없이 두글자 영어(대문자)로 작성할 것)
IoC Container는 Bean 객체를 만들면서, 어떤 특정한 Bean이 필요로 하는 의존성이 존재한다면 해당 의존성을 자신이 관리하고 있는 Bean 객체중에 하나를 선정해서 할당을 해줍니다. 이를 [ ](이)라고 합니다.
[ ](을)를 하기위해 생성자, setter 그리고 @Autowired를 활용할 수 있습니다.
정답: DI
27 (3점)
static int[] arr;
static boolean[] isSelected;
public static void main(String[] args){
arr = new int[]{1,2,3,4,5,6,7};
isSelected = new boolean[7];
print(0);
}
static void print(int depth) {
if(depth == arr.length) {
System.out.print("{");
for(int i=0;i<arr.length;i++) {
if(isSelected[i])
System.out.print(" "+arr[i]);
}
System.out.println(" }");
}else {
isSelected[depth] = true;
print(depth+1);
isSelected[depth] = false;
print(depth+1);
}
}
Java
복사
위 코드를 실행했을 때 출력되는 결과값은 arr배열의 무엇에 해당하는 지 적으시오. (한글, 띄어쓰기 없이)
정답 : 부분집합
28 (2점)
___패턴은 사용자 인터페이스를 비즈니스 로직으로부터 분리하는 것을 목표로 만들어진 디자인 패턴입니다. ___패턴의 각 부분들은 각자의 역할이 분명히 나눠져 있습니다. 각자가 하는 역할을 구분해 놓는다면, 각각의 부분을 독립적으로 발전시킬 수 있습니다. 이렇게 각 부분이 담당하는 역할을 나누는 것을 관심사 분리라고 표현합니다. 다음 ___에 들어갈 패턴으로 옳은 것을 고르시오.
1.
MYC
2.
MCV
3.
MVC
4.
CVM
정답 : 3번
29 (4점)
AopController 클래스의 logging() 메소드를 실행하고 콘솔창처럼 결과를 출력하기 위해 아래의 빈 칸에 알맞은 코드를 작성하시오. (특수문자, 대소문자 유의)
package com.example.aop.aspect;
@Slf4j
@Aspect
@Component
public class LoggingAspect {
[빈 칸]("execution(* com.example.aop.controller.AopController.*(..))")
public void ProceedingJoinPoint(JoinPoint joinPoint) throws Throwable {
log.info("starts measuring a execution time.");
long start = System.currentTimeMillis();
Object proceed = joinPoint.proceed();
long end = System.currentTimeMillis();
log.info("[{}] executed in : {}ms", joinPoint.getSignature().toShortString(), end - start);
return proceed;
}
}
---
package com.example.aop.controller;
@Slf4j
@RestController
public class AopController {
@GetMapping("/log")
public void logging() {
log.info("in AopController");
}
}
Java
복사
<콘솔창>
starts measuring a execution time.
in AopController
[AopController.logging()] executed in : 1ms
Plain Text
복사
정답 : @Around
30 (2점)
다음은 프로젝트 실행시 나타날 수 있는 오류화면 중 하나이다. 이 오류가 발생할 수 있는 원인으로 가장 알맞은 것을 고르시오.
1.
DB연결 설정이 제대로 이루어지지 않았다.
2.
RequestMapping이 제대로 이루어지지 않았다.
3.
JPA에서 dialect 설정이 제대로 이루어지지 않았다.
4.
JRE 버전이 너무 낮게 설정되어있다.
정답: 1번
2점 (7개) | 7, 14, 16, 19, |
3점 (10개) | 1, 3, 5, 6, 13, 17, 20, 21, 22 |
4점 (9개) | 2, 9, 10, 11, 12, 18, 23, 25 |
5점 (4개) | 4, 8, 15, 24 |
주관식:
3, 4, 9, 21, 30
26 ~ 30 : 2점 3개, 3점 1개 4점 1개
총 점 100점