[TIL/정처기] 2025/04/01
21년 3회 기출 코드 정리 ✍️21-3-1-JAVA ⚙️이 코드는 싱글톤 패턴을 사용하여 Connection 객체를 한 번만 생성하고 모든 호출에서 동일한 인스턴스를 반환한다. conn1 = Connection.get();에서 \_inst가 null이므로 객체를 생성
21년 3회 기출 코드 정리 ✍️
21-3-1-JAVA ⚙️
class Connection {
private static Connection _inst = null;
private int count = 0;
public static Connection get(){
if(_inst == null){
_inst = new Connection();
return _inst;
}
return _inst;
}
public void count(){ count++; }
public int getCount(){ return count; }
}
public class Test {
public static void main(String[] args) {
Connection conn1 = Connection.get();
conn1.count();
Connection conn2 = Connection.get();
conn2.count();
Connection conn3 = Connection.get();
conn3.count();
System.out.print(conn1.getCount());
}
}이 코드는 싱글톤 패턴을 사용하여 Connection 객체를 한 번만 생성하고 모든 호출에서 동일한 인스턴스를 반환한다. ``conn1 = Connection.get();``에서 _inst가 null이므로 객체를 생성하지만, 이후 conn2와 conn3는 _inst가 이미 존재하므로 같은 객체를 참조한다. 따라서 count()를 세 번 호출하면 count 값이 누적되어 최종 출력은 3이 된다.
21-3-7-C ⚙️
#include <stdio.h>
struct jsu {
char nae[12];
int os, db, hab, hhab;
};
int main() {
struct jsu st[3] = {{"데이터1",95,88},{"데이터2",84,91},{"데이터3",86,75}};
struct jsu* p;
p = &st[0];
(p + 1) -> hab = (p + 1) -> os + (p + 2) -> db;
(p + 1) -> hhab = (p + 1) -> hab + p -> os + p -> db;
printf("%d", (p + 1) -> hab + (p + 1) -> hhab);
}이 코드는 구조체 배열 st[3]을 선언하고 포인터 p를 사용하여 배열 요소에 접근하는 방식이다. 포인터 연산 (p + 1)과 (p + 2)를 통해 두 번째와 세 번째 구조체를 참조하고, -> 연산자를 사용하여 구조체 멤버에 접근하고 값을 수정한다. 예를 들어, (p + 1) -> hab는 두 번째 구조체의 hab 값을 수정하며, 그 값을 다른 멤버와 연산하여 계산한다. 이를 통해 포인터 산술과 구조체 멤버 접근을 효율적으로 처리하고 있다.
21-3-9-Python ⚙️
x, y = 100, 200
print(x == y)python에서는 boolean 값이 대문자로 시작한다. 따라서 False가 출력된다.
21-3-16-C ⚙️
#include <stdio.h>
int main() {
int* array[3];
int a = 12, b = 24, c = 36;
array[0] = &a;
array[1] = &b;
array[2] = &c;
printf("%d", *array[1] + **array + 1);
}이 코드는 포인터 배열을 사용하여 정수 변수 a, b, c의 주소를 저장하고 이를 역참조하여 값을 출력한다. array[1]은 b의 값 24를 가져오고, array는 array[0]이 가리키는 a의 값 12를 가져오므로, array[1] + array + 1은 24 + 12 + 1 = 37이 되어 최종 출력은 37이 된다. 여기서 는 포인터가 가리키는 값을 참조하는 단일 역참조이며, 는 포인터 배열을 통해 이중 역참조하여 값을 가져온다는 차이가 있다.
21-3-17-JAVA ⚙️
public class Test {
public static void main(String[] args) {
int w = 3, x = 4, y = 3, z=5;
if((w == 2 | w == y) & !(y > z) & (1 == x^y != z)){
w = x + y;
if(7 == x^y != w)
System.out.println(w);
else
System.out.println(x);
}
else {
w = y + z;
if(7 == y^z != w)
System.out.println(w);
else
System.out.println(z);
}
}
}^는 XOR(배타적 논리합) 연산을 수행하는 연산자이다. 두 비트가 다를 때 1, 같을 때 0을 반환한다. XOR 연산자를 너무 오랜만에 봐서 까먹었다. 최종 출력 결과는 7.
이론 문제 포인트 ✍️
1. 다크 데이터 ✅
- Dark Data, 특정 목적을 가지고 데이터를 수집하였으나, 이후 활용되지 않고 저장만 되어있는 대량의 데이터
2. 타이포스쿼팅 ✅
- Typosquatting, 네티즌들이 사이트에 접속할 때 주소를 잘못 입력하거나 철자를 빠뜨리는 실수를 이용하기 위해 이와 유사한 유명 도메인을 미리 등록하는 것
- URL 하이재킹(Hijacking)이라고도 함
3. 스니핑 ✅
- Sniffing, 네트워크의 중간에서 남의 패킷 정보를 도청하는 해킹 유형의 하나, 수동적 공격에 해당
4. 워터링 홀 ✅
- Watering Hole, 목표 대상이 자주 방문하는 웹 사이트를 사전에 감염시켜 대상이 해당 사이트에 방문했을 때 악성 코드에 감염되게 하는 웹 기반 공격
- 감염된 PC를 기반으로 대상이 속한 조직의 중요 시스템에 접근하거나 불능으로 만드는 등의 영향력을 행사할 수 있음
5. 기타 정보 보안 관련 용어 ✅
- ``좀비(Zombie) PC``: 악성 코드에 감염되어 다른 프로그램이나 컴퓨터를 조종하도록 만들어진 컴퓨터, C&C 서버의 제어를 받아 주로 DDos 공격 등에 이용됨
- ``C&C 서버``: 해커가 원격지에서 감염된 좀비 PC에 명령을 내리고 악성코드를 제어하기 위한 용도로 사용하는 서버
- ``봇넷(Botnet)``: 악성 프로그램에 감염되어 악의적인 의도로 사용될 수 있는 다수의 컴퓨터들이 네트워크로 연결된 형태
- ``제로 데이 공격(Zero Day Attack)``: 보안 취약점이 발견되었을 때 발견된 취약점의 존재 자체가 널리 공표되기도 전에 해당 취약점을 통하여 이루어지는 보안 공격, 공격의 신속성을 의미함
- ``트로이 목마(Trojan Horse)``: 정상적인 기능을 하는 프로그램으로 위장하여 프로그램 내에 숨어 있다가 해당 프로그램이 동작할 때 활성화되어 부작용을 일으키지만 자기 복제 능력은 없음
- ``CC(Common Criteria) 인증``: 국가마다 서로 다른 정보보호시스템 평가기준을 연동하고 평가결과를 상호 인증하기 위해 제정된 정보보안 평가기준, ISO/IEC 15408에 등록된 국제 표준
- ``멀버타이징(Malvertising)``: 악성 소프트웨어를 뜻하는 멀웨어(Malware)와 광고(Advertising)의 합성어, 온라인 광고를 통해 악성코드를 유포시키는 행위를 뜻함
- ``정보공유분석센터(ISAC; Information Sharing & Analysis Center)``: 취약점 및 침해요인과 그 대응방안에 관한 정보를 제공하며, 침해사고가 발생하는 경우 실시간 경보/분석 체계를 운영하고, 금융/통신 등 분야별 정보통신기반시설을 보호하기 위한 업무를 수행하는 곳
- ``업무연속성계획(BCP; Business Continuity Planning)``: 각종 재해/장애/재난으로부터 위기관리를 기반으로 재해복구, 업무복구 및 재개, 비상계획 등의 비즈니스 연속성을 보장하기 위한 계획. RTO, RPO, 우선순위를 설정하기 위해 업무 영향 분석(BIA)을 수행함
- ``데이터 디들링(Data Diddling)``: 처리할 자료를 다른 자료와 바꿔서 처리하는 것, 입력값이나 출력값을 부정한 의도로 수정하여 잘못된 결과가 나오도록 유도하는 방식
- ``비트로커(BitLocker)``: Windows 7부터 지원되기 시작한 Windows 전용의 볼륨 암호화 기능. TPM(Trusted Platform Module)과 AES-128 알고리즘을 사용함
- ``공급망 공격(Supply Chain Attack)``: 소프트웨어 공급망에 침투하여 악성코드를 배포하는 공격, SW 빌드 및 배포 과정에 악성코드를 삽입하여 이용자들을 공격함
- ``바이러스(Virus)``: 컴퓨터의 정상적인 작동을 방해하기 위해 운영체제나 저장된 데이터에 손상을 입히는 프로그램. 자신을 복제할 수 있고, 다른 프로그램을 감염시킬 수 있음
- ``웜(Worm)``: 네트워크를 통해 연속적으로 자신을 복제하여 시스템의 부하를 높임으로써 결국 시스템을 다운시키는 바이러스의 일종. 분산 서비스 거부 공격, 버퍼 오버플로 공격, 슬래머 등이 웜 공격의 한 형태임
More to read
Amazon VPC Architecture 이해하기
새로운 프로젝트를 기획하며, 개발에서 무엇을 가장 먼저 고민해야 하는지 다시 돌아보게 되었습니다.한때는 프론트엔드가 모든 설계의 출발점이라고 믿었습니다. 유저가 무엇을 보고, 어떤 흐름에서 머무르고 이탈하는지에 대한 이해 없이 서비스를 만든다는 건 불가능하다고 생각했기
'원사이트'프론트엔드 관점으로 알고리즘 이해하기
오랜만에 방법론에 관한 글을 쓰게 되었습니다. 최근 상황은 이렇습니다. SSAFY에서는 하루에 엄청난 양의 알고리즘 문제들을 과제로 수행하게 됩니다. 그 과정에서, '구현력'이 매우 떨어진다는 생각이 들었습니다. 완전히 어려운 문제라면 '아쉬움'이라는 감정조차 느끼지
SubnetVPC 설계의 시작: IP와 Subnet
반복되는 루틴 속에서 얻은 안정감을 발판 삼아, 이제는 기술적 스펙트럼을 넓히기 위한 개인 프로젝트에 착수하고자 합니다.이번 프로젝트의 목표는 단순한 포트폴리오 구축을 넘어, 실제 서비스 수준의 블로그 시스템 구현과 다국어 처리 적용 등 실무에 가까운 역량을 한 단계