[TIL/정처기] 2025/03/27
22년 2회 기출 코드 정리 ✍️22-2-7-JAVA ⚙️보통 switch 문이 문제로 출제되면, break를 생략했을 때의 흐름(fall-through 현상)에 대해 묻는 경우가 많다. 코드 자체는 쉬우니 설명은 추가하지 않겠다. 출력 결과는 -8.22-2-8-C ⚙
22년 2회 기출 코드 정리 ✍️
22-2-7-JAVA ⚙️
public class Test {
public static void main(String[] args) {
int i = 3, k = 1;
switch(i){
case 1: k++;
case 2: k -= 3;
case 3: k = 0;
case 4: k +=3;
case 5: k -= 10;
default: k--;
}
System.out.print(k);
}
}보통 switch 문이 문제로 출제되면, break를 생략했을 때의 흐름(fall-through 현상)에 대해 묻는 경우가 많다. 코드 자체는 쉬우니 설명은 추가하지 않겠다. 출력 결과는 -8.
22-2-8-C ⚙️
#include <stdio.h>
struct A {
int n;
int g;
};
main(){
struct A st[2];
for(int i = 0; i < 2; i++){
st[i].n = i;
st[i].g = i + 1;
}
printf("%d", st[0].n + st[1].g);
}struct A는 int n과 int g 두 멤버를 가진 구조체이다. 구조체 배열의 접근과 각 멤버의 값 활용에 관한 코드이다. 설명은 생략하고자 한다. 출력 결과는 2.
22-2-13-Python ⚙️
a = "REMEMBER NOVEMBER"
b = a[0:3] + a[12:16]
c = "R AND %s" % "STR"
print(b+c)기출문제를 분석하다 보니 파이썬에서는 보통, 문자열 슬라이싱과 문자열 포맷팅의 활용에 관해 이해하고 있는지 묻는 경향이 있다. 설명은 생략한다. 출력 결과는 REMEMBER AND STR.
22-2-15-C ⚙️
#include <stdio.h>
int len(char* p);
int main(){
char* p1 = "2022";
char* p2 = "202207";
int a = len(p1);
int b = len(p2);
printf("%d", a + b);
}
int len(char* p){
int r = 0;
while(*p != '\0'){
p++;
r++;
}
return r;
}문자열의 길이를 구하는 함수를 직접 구현한 코드이고, 해당 함수와 포인터를 활용한 문자열 순회에 관한 이해를 묻고 있다. 출력 결과는 10.
22-2-16-C ⚙️
#include <stdio.h>
int main() {
int a[4] = {0, 2, 4, 8};
int b[3];
int* p;
int sum = 0;
for(int i = 1; i < 4; i++){
p = a + i;
b[i - 1] = *p - a[i - 1];
sum = sum + b[i - 1] + a[i];
}
printf("%d", sum);
}포인터 연산에 관한 코드. 이런 종류의 코드는 어려운 것은 아닌데 변수가 많아서 실수하기 쉽다. i / p / b[i - 1] / sum와 같은 변수들의 변화를 꼼꼼히 기록하면 쉽게 풀어낼 수 있다. 출력 결과는 22.
22-2-17-JAVA ⚙️
public class Test {
public static void main(String[] args) {
cond obj = new cond(3);
obj.a = 5;
int b = obj.func();
System.out.print(obj.a + b);
}
}
class cond {
int a;
public cond(int a) {
this.a = a;
}
public int func() {
int b = 1;
for(int i = 1; i < a; i++)
b += a * i;
return a + b;
}
}Java에서, 객체의 인스턴스 변수는 public으로 선언되었을 경우 외부에서도 접근 및 수정이 가능하다는 것이 핵심인 코드이다. 따라서 func()에서의 연산은 a는 5, b는 1임을 전제로 수행된다. 출력 결과는 61.
이론 문제 포인트 ✍️
1. 집합 연산자를 이용한 통합 질의 ✅
- 집합 연산자를 사용하여 2개 이상의 테이블의 데이터를 하나로 통합한다
SELECT 속성명1, 속성명2, ...
FROM 테이블명
UNION | UNION ALL | INTERSECT |EXCEPT
SELECT 속성명1, 속성명2, ...
FROM 테이블명
[ORDER BY 속성명 [ASC | DESC]];- ``UNION``: 두 SELECT문의 조회 결과를 통합하여 모두 출력, 중복된 행은 한 번만 출력함(합집합)
- ``UNION ALL``: 두 SELECT문의 조회 결과를 통합하여 모두 출력, 중복된 행도 그대로 출력함(합집합)
- ``INTERSECT``: 두 SELECT문의 조회 결과 중 공통된 행만 출력(교집합)
- ``EXCEPT``: 첫 번째 SELECT문의 조회 결과에서 두 번째 SELECT문의 조회 결과를 제외한 행을 출력(차집합)
2. OUTER JOIN ✅
조인은 따로 묶어서 정리할 예정
3. 소프트웨어 개발 보안 요소 ✅
- ``기밀성(Confidentiality)``: 시스템 내의 정보와 자원은 인가된 사용자에게만 접근이 허용되고, 정보가 전송 중에 노출되더라도 데이터를 읽을 수 없음
- ``무결성(Integrity)``: 시스템 내의 정보는 오직 인가된 사용자만 수정할 수 있음
- ``가용성(Availability)``: 인가받은 사용자는 시스템 내의 정보와 자원을 언제라도 사용할 수 있음
=> 여기까지가 보안의 3대 요소
- ``인증(Authentication)``: 시스템 내의 정보와 자원을 사용하려는 사용자가 합법적인 사용자인지를 확인하는 모든 행위
- ``부인 방지(NonRepudiation)``: 데이터를 송신, 수신한 자가 해당 사실을 부인할 수 없도록 증거를 제공함
4. SQL 삽입 ✅
- SQL을 삽입하여 내부 데이터베이스 서버의 데이터를 유출 및 변조하고 관리자 인증을 우회하는 보안 약점, 동적 쿼리에 사용되는 입력 데이터에 예약어 및 특수문자가 입력되지 않게 필터링 되도록 설정하여 방지할 수 있음
5. 개인키 암호화 기법 ✅
- Private Key Encryption, 동일한 키로 데이터를 암호화하고 복호화하는 암호화 기법 - 대칭 암호 기법 또는 단일키 암호화 기법이라고도 함 - 암호화와 복호화 속도가 빠름 - 관리해야 할 키의 수가 많음 - 스트림 암호화 방식과 블록 암호화 방식이 있음
- ``스트림 암호화 방식``: 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화 하는 방식(LFSR / RC4 / TKIP)
- ``블록 암호화 방식``: 한 번에 하나의 데이터 블록을 암호화 하는 방식(DES, SEED, AES, ARIA, IDEA, Skipjack)
6. IDEA ✅
- IDEA(International Data Encryption Algorithm), 스위스의 라이(Lai)와 메시(Messey)가 1990년에 개발한 PES를 개선한 알고리즘
- 블록 길이는 64비트, 키 길이는 128비트
7. Skipjack ✅
- 국가 안전 보장국(NSA)에서 개발한 암호화 알고리즘 - 클리퍼 칩(Clipper Chip)이라는 IC 칩에 내장되어 있음 - 블록 길이는 64비트, 키 길이는 80비트 - 주로 음성 통신 장비에 삽입되어 음성 데이터를 암호화 함
8. DES ✅
- Data Encryption Standard, 1975년 미국 NBS에서 발표한 개인키 암호화 알고리즘 - 블록 길이는 64비트, 키 길이는 56비트, 16회의 라운드를 수행함 - DES를 세 번 적용하여 보안을 더욱 강화한 3DES(Triple DES)가 있음
9. AES ✅
- Advanced Encryption Standard, 2001년 미국 표준 기술 연구소(NIST)에서 발표한 개인키 암호화 알고리즘 - DES의 한계를 느낀 NIST에서 공모한 후 발표 - 블록 크기는 128비트, 키 길이에 따라 AES-128, AES-192, AES-256으로 분류됨
10. TKIP ✅
- Temporal Key Integrity Protocol, 기존의 무선 랜 보안 프로토콜인 WEP의 취약성을 보완한 데이터 보안 프로토콜 - 암호 알고리즘의 입력 키 길이를 128비트로 늘리고 패킷당 키 할당, 키값 재설정 등의 키 관리 방식을 개선
More to read
Amazon VPC Architecture 이해하기
새로운 프로젝트를 기획하며, 개발에서 무엇을 가장 먼저 고민해야 하는지 다시 돌아보게 되었습니다.한때는 프론트엔드가 모든 설계의 출발점이라고 믿었습니다. 유저가 무엇을 보고, 어떤 흐름에서 머무르고 이탈하는지에 대한 이해 없이 서비스를 만든다는 건 불가능하다고 생각했기
'원사이트'프론트엔드 관점으로 알고리즘 이해하기
오랜만에 방법론에 관한 글을 쓰게 되었습니다. 최근 상황은 이렇습니다. SSAFY에서는 하루에 엄청난 양의 알고리즘 문제들을 과제로 수행하게 됩니다. 그 과정에서, '구현력'이 매우 떨어진다는 생각이 들었습니다. 완전히 어려운 문제라면 '아쉬움'이라는 감정조차 느끼지
SubnetVPC 설계의 시작: IP와 Subnet
반복되는 루틴 속에서 얻은 안정감을 발판 삼아, 이제는 기술적 스펙트럼을 넓히기 위한 개인 프로젝트에 착수하고자 합니다.이번 프로젝트의 목표는 단순한 포트폴리오 구축을 넘어, 실제 서비스 수준의 블로그 시스템 구현과 다국어 처리 적용 등 실무에 가까운 역량을 한 단계