오사카 프로그래머의 생존기

일본 IT 자격증 필수 개념: STS 분할 및 암합적 강도 출제 함정 피하기 본문

응용정보기술자

일본 IT 자격증 필수 개념: STS 분할 및 암합적 강도 출제 함정 피하기

푸름군 2026. 5. 6. 01:42

 

[오전/오후 단골 출제! 모듈 분할, 결합도, 강도 완벽 정리] 소프트웨어 설계 파트에서 절대 빠지지 않는 핵심! 모듈의 독립성을 평가하는 결합도와 강도의 순서를 확실하게 암기하고 1문제를 거저먹어 봅시다.

안녕하세요! 여러분의 오사카 노비... 아니, 6년 차 현역 개발자이자 같이 응용정보기술자(AP) 빡세게 준비하고 있는 수험생 동지입니다! ㅠㅠ 다들 공부 잘돼가시나요? 저 지금 이 부분 기출문제 푸는데 진짜 머리에 쥐나는 줄 알았어요. 현업에서는 코드 리뷰할 때마다 사수님한테 "야, 모듈 간 결합도 좀 낮춰라, 의존성 너무 심하잖아!"라는 잔소리를 귀에 딱지가 앉도록 듣는데, 막상 이걸 일본어 한자로 된 이론으로 외우려니까 왜 이렇게 헷갈리는지... 진짜 어이가 없었죠. 😅

하지만 솔직히 말해서 이 '모듈 설계' 파트는 오전, 오후 가리지 않고 매년 무조건 1문제 이상은 튀어나오는 초특급 빈출 영역입니다. 그니까요, 이거 포기하면 절대 안 됩니다! 우리가 현업에서 좋은 코드를 짜기 위해서도 필수지만, 일단 자격증을 따려면 무조건 외우고 시험장 들어가야 해요. 저랑 같이 헷갈리는 순서 확실하게 잡고, 기출문제까지 싹 다 부숴봅시다. 우리 같이 화이팅해요! 🔥

[1단계] 핵심 이론 부수기 🔨

 

우리가 시스템을 만들 때, 하나의 거대한 덩어리로 만들면 나중에 수정하기가 너무 힘들잖아요? 그래서 기능별로 잘게 쪼개는데, 이 조각을 모듈(Module)이라고 합니다. 좋은 시스템은 각 모듈이 독립적으로 잘 돌아가야 해요. 이때 출제자가 묻는 건 크게 세 가지입니다. "어떻게 쪼갤래?", "모듈끼리 얼마나 끈끈해?", "모듈 내부는 얼마나 똘똘 뭉쳤어?" 입니다. 차근차근 살펴볼게요!

1. 모듈 분할 (モジュール分割, Module Partitioning)

큰 프로그램을 작은 모듈로 나누는 기법이에요. 시험에 자주 나오는 3가지만 딱 기억하세요.

  • STS 분할 (STS分割, Source/Transform/Sink): 입력(Source), 처리(Transform), 출력(Sink)의 3단계 구조로 모듈을 나누는 가장 기본적인 뼈대입니다. 데이터의 흐름에 따라 나누는 거죠.
  • 트랜잭션 분할 (トランザクション分割, Transaction Partitioning): 데이터의 종류(트랜잭션)에 따라 처리 경로가 다를 때 사용하는 분할법이에요. 스위치(Switch) 문법 생각하시면 이해가 쏙쏙 됩니다.
  • 공통 기능 분할 (共通機能分割): 여러 곳에서 공통으로 쓰는 기능(예: 로그 남기기, 권한 체크 등)을 별도의 모듈로 쏙 빼내는 겁니다.

2. 모듈 결합도 (モジュール結合度, Module Coupling)

결합도는 '모듈과 모듈 사이'가 얼마나 끈끈하게 연결되어 있는지를 나타냅니다. 현업에서 모듈끼리 너무 끈끈하면(의존성이 높으면) 하나 고쳤을 때 다른 곳에서 에러가 터지는 대참사가 발생해요. 그래서 결합도는 약할수록(독립성이 높아) 좋은 설계입니다. 1번이 제일 좋고, 6번이 제일 최악(스파게티 코드)입니다. 이 순서 진짜 무조건 외워야 합니다!

  • 1. 데이터 결합 (データ結合, Data Coupling) - [가장 좋음/약함]: 모듈 간에 단순한 변수(데이터)만 매개변수로 주고받는 쿨한 사이입니다. 가장 이상적이에요!
  • 2. 스탬프 결합 (スタンプ結合, Stamp Coupling): 배열이나 레코드 같은 데이터 구조체를 통째로 넘기는 겁니다. 필요한 건 데이터 일부인데 덩어리를 줘버리니까 1번보단 살짝 별로죠.
  • 3. 제어 결합 (制御結合, Control Coupling): 다른 모듈의 실행 흐름을 제어하기 위해 제어 플래그(Flag)를 넘기는 상태입니다. "야, 내가 true 주면 너 A 기능 실행해" 하고 남의 로직에 간섭하는 거죠.
  • 4. 외부 결합 (外部結合, External Coupling): 외부에 선언된 변수나 데이터를 여러 모듈이 참조하는 상태입니다. 글로벌 변수 쓴다고 생각하면 아찔하죠?
  • 5. 공통 결합 (共通結合, Common Coupling): 전역(Global) 데이터 영역을 여러 모듈이 함께 사용하는 끔찍한 상태입니다. 누가 데이터를 바꿨는지 추적하기가 완전 헬(Hell)이에요.
  • 6. 내용 결합 (内容結合, Content Coupling) - [가장 나쁨/강함]: 남의 모듈 내부 데이터를 직접 건드리거나 명령어를 직접 쓰는 겁니다. 사수한테 등짝 스매싱 맞는 1순위 코드입니다.

3. 모듈 강도 / 응집도 (モジュール強度, Module Cohesion)

강도(또는 응집도)는 '모듈 내부의 요소들'이 얼마나 하나의 목적을 위해 똘똘 뭉쳐있는지를 나타냅니다. 한 모듈 안에서는 다들 한마음 한뜻이어야 좋겠죠? 그래서 강도는 강할수록 좋은 설계입니다. 1번이 제일 좋고 7번이 제일 최악입니다.

  • 1. 기능적 강도 (機能的強度, Functional) - [가장 좋음/강함]: 모듈 내의 모든 요소가 단 하나의 단일 기능만을 수행합니다. (예: '급여 계산' 모듈은 진짜 급여 계산만 함) 최고 존엄!
  • 2. 정보적 강도 (情報的強度, Informational): 동일한 데이터 구조나 자원을 다루는 기능들을 모아놓은 겁니다. (예: 특정 DB 테이블에 대한 CRUD 기능 모음) 객체지향적 접근이죠.
  • 3. 통신적 강도 (通信的強度, Communicational): 동일한 입력 데이터를 사용하거나, 동일한 출력 데이터를 만드는 기능끼리 모아놓은 겁니다.
  • 4. 절차적 강도 (手順的強度, Procedural): 모듈 내의 기능들이 순차적으로 실행되어야 하는 순서에 따라 묶인 겁니다.
  • 5. 시간적 강도 (時間的強度, Temporal): 특정 시간에 함께 실행되어야 하는 기능들을 모아놓은 겁니다. (예: 시스템 초기화 모듈, 에러 발생 시 처리 모듈)
  • 6. 논리적 강도 (論理的強度, Logical): '입력 처리', '출력 처리'처럼 그냥 논리적으로 성격이 비슷한 것들끼리 묶어놓은 겁니다. 연관성이 꽤 떨어집니다.
  • 7. 암합적 강도 (暗合的強度 / 偶長的強度, Coincidental) - [가장 나쁨/약함]: 아무런 연관성도 없는데 그냥 우연히(암합적) 한 모듈에 때려 박은 겁니다. 최악의 쓰레기통 모듈이죠.
💡 벼락치기 암기 꿀팁!
시험장 가기 5분 전, 이것만 입으로 중얼거리세요!
"결약강강!" (결합도는 약할수록, 강도는 강할수록 좋다!)
- 결합도 앞글자: 데스제 외공내 (데스노트 제발... 외공내놔!!)
- 강도 앞글자: 기정통 절시논암 (기동대가 정통으로 절벽 시야에서 논다.. 암!)
말이 안 돼도 그냥 외워야 합니다! 무조건 맞히는 게 장땡이에요!

[2단계] 헷갈리는 개념 전격 비교 📊

 

저도 처음에 기출문제 풀 때 "결합도랑 강도가 뭐가 다른 건데?" 하면서 완전 멘붕왔거든요. 출제자들은 이 두 개념을 교묘하게 섞어서 보기에 던집니다. 정확한 차이점을 표로 머릿속에 박아둡시다.

구분 포인트 모듈 결합도 (結合度) 모듈 강도/응집도 (強度)
관점 (어디를 보느냐) 모듈 간(사이)의 상호 의존성 모듈 내부 요소들의 연관성
이상적인 상태 약할수록 (弱) 좋다! 독립적임. 강할수록 (強) 좋다! 하나의 목적에 충실함.
최고 (Best) 데이터 결합 (データ結合) 기능적 강도 (機能的強度)
최악 (Worst) 내용 결합 (内容結合) 암합적 강도 (暗合的強度)
⚠️ 기출문제 함정 주의! (저도 여기서 낚였습니다 ㅠㅠ)
문제에서 가장 나쁜 강도를 고르라고 할 때, 보기에 暗合的強度(암합적 강도)가 나옵니다. 그런데 이걸 일본어 한자로 대충 읽다가 暗号強度(암호 강도)로 착각해서 "어? 암호 강도는 보안이니까 강한 게 좋은 거 아닌가?" 하고 넘어가 버리는 실수를 진짜 많이 해요.

암합(暗合)은 '우연히 일치함'이라는 뜻입니다! 보안에서 말하는 암호(暗号)가 절대 아니니, 한자 모양(合 vs 号) 헷갈리지 않게 눈 크게 뜨고 푸셔야 합니다! 출제자들이 아주 영악합니다.

 

 
💯

합격 치트키 요약 노트

✨ 핵심 출제 키워드: 데이터 결합(Best), 기능적 강도(Best)
📊 오답 함정: 暗合的強度 (암합적 강도)를 암호(暗号)로 헷갈리지 말 것! 가장 나쁜(약한) 강도임.
🧮 1초 컷 암기법:
"결약강강!" (결합도는 약할수록 ⭕, 강도는 강할수록 ⭕)

실전 기출문제 풀어보기 ✍️

자, 여기까지 잘 따라오셨나요? 방금 공부한 내용이 실제 시험에서는 어떻게 나오는지, 응용정보기술자(AP) 스타일의 기출문제를 딱 5개만 같이 풀어봅시다! 풀어보고 틀려봐야 내 것이 됩니다.

문제 1. 모듈 결합도(モジュール結合度)가 가장 약한 것(독립성이 가장 높은 것)부터 순서대로 바르게 나열한 것은?
  • 가. 데이터 결합 → 스탬프 결합 → 제어 결합 → 내용 결합
  • 나. 내용 결합 → 외부 결합 → 스탬프 결합 → 데이터 결합
  • 다. 데이터 결합 → 제어 결합 → 스탬프 결합 → 내용 결합
  • 라. 스탬프 결합 → 데이터 결합 → 외부 결합 → 내용 결합
정답: 가
해설: 결합도는 약할수록 좋은 설계입니다. '데스제 외공내' 순서대로 결합도가 강해집니다(나빠집니다). 따라서 가장 약한(좋은) 데이터 결합부터 시작해서 내용 결합으로 끝나는 '가'가 정답입니다.
문제 2. 모듈 강도(モジュール強度)에 대한 설명 중, 가장 강한(독립성이 높은) 강도는 무엇인가?
  • 가. 시간적 강도 (時間的強度)
  • 나. 통신적 강도 (通信的強度)
  • 다. 기능적 강도 (機能的強度)
  • 라. 암합적 강도 (暗合的強度)
정답: 다
해설: 강도(응집도)는 강할수록 좋은 설계입니다. 가장 이상적이고 강한 강도는 모듈 내의 모든 요소가 단 하나의 기능만을 수행하는 '기능적 강도'입니다. 반대로 가장 약하고 나쁜 것은 '암합적 강도'입니다.
문제 3. 모듈 간의 인터페이스로 배열이나 레코드 등의 데이터 구조체를 전달하는 결합도는 무엇인가?
  • 가. 데이터 결합 (データ結合)
  • 나. 제어 결합 (制御結合)
  • 다. 공통 결합 (共通結合)
  • 라. 스탬프 결합 (スタンプ結合)
정답: 라
해설: 단순 변수만 넘기면 데이터 결합이지만, 배열이나 구조체 같은 덩어리를 통째로 넘기면 도장(Stamp) 찍듯 넘긴다고 하여 '스탬프 결합'이라고 부릅니다.
문제 4. 모듈 분할 기법 중, 입력(Source), 처리(Transform), 출력(Sink)의 데이터 흐름에 따라 모듈을 분할하는 기법은?
  • 가. 트랜잭션 분할
  • 나. STS 분할
  • 다. 공통 기능 분할
  • 라. 잭슨(Jackson) 분할
정답: 나
해설: 입력(Source), 변환/처리(Transform), 출력(Sink)의 첫 글자를 딴 것이 바로 STS 분할입니다. 데이터의 흐름을 중심으로 설계하는 가장 기본적인 분할 기법입니다.
문제 5. 다음 모듈 강도 중, 모듈 내의 요소들이 아무런 의미적 연관성 없이 그저 우연히 모여 있는 가장 나쁜 상태의 강도는?
  • 가. 논리적 강도
  • 나. 정보적 강도
  • 다. 절차적 강도
  • 라. 암합적 강도
정답: 라
해설: 아무 연관 없이 우연히(암합적) 묶여 있는 상태가 바로 '암합적 강도(暗合的強度)'입니다. 강도 중에서 가장 약하고 유지보수가 불가능에 가까운 최악의 상태입니다. (암호 강도로 착각하지 않도록 주의!)