| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 성장기록
- DBUnit
- 스텁
- 데이터 결합
- 개발자회고
- 모듈 강도
- 기능적 강도
- 모듈 분할
- Integration Test
- 모듈 결합도
- 필드주입
- CI/CD
- 성능최적화
- 모듈 설계
- Transactional
- 탑다운 테스트
- 암합적 강도
- 테스트코드
- 바텀업 테스트
- 일본IT
- 생성자주입
- spring
- STS분할
- 단체테스트
- 결합 테스트
- 응용정보기술자
- java
- 블랙박스 테스트
- 오사카프로그래머
- 프로그래머블로그
- Today
- Total
오사카 프로그래머의 생존기
일본 IT 자격증 필수 개념: STS 분할 및 암합적 강도 출제 함정 피하기 본문
안녕하세요! 여러분의 오사카 노비... 아니, 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 号) 헷갈리지 않게 눈 크게 뜨고 푸셔야 합니다! 출제자들이 아주 영악합니다.
합격 치트키 요약 노트
실전 기출문제 풀어보기 ✍️
자, 여기까지 잘 따라오셨나요? 방금 공부한 내용이 실제 시험에서는 어떻게 나오는지, 응용정보기술자(AP) 스타일의 기출문제를 딱 5개만 같이 풀어봅시다! 풀어보고 틀려봐야 내 것이 됩니다.
- 가. 데이터 결합 → 스탬프 결합 → 제어 결합 → 내용 결합
- 나. 내용 결합 → 외부 결합 → 스탬프 결합 → 데이터 결합
- 다. 데이터 결합 → 제어 결합 → 스탬프 결합 → 내용 결합
- 라. 스탬프 결합 → 데이터 결합 → 외부 결합 → 내용 결합
해설: 결합도는 약할수록 좋은 설계입니다. '데스제 외공내' 순서대로 결합도가 강해집니다(나빠집니다). 따라서 가장 약한(좋은) 데이터 결합부터 시작해서 내용 결합으로 끝나는 '가'가 정답입니다.
- 가. 시간적 강도 (時間的強度)
- 나. 통신적 강도 (通信的強度)
- 다. 기능적 강도 (機能的強度)
- 라. 암합적 강도 (暗合的強度)
해설: 강도(응집도)는 강할수록 좋은 설계입니다. 가장 이상적이고 강한 강도는 모듈 내의 모든 요소가 단 하나의 기능만을 수행하는 '기능적 강도'입니다. 반대로 가장 약하고 나쁜 것은 '암합적 강도'입니다.
- 가. 데이터 결합 (データ結合)
- 나. 제어 결합 (制御結合)
- 다. 공통 결합 (共通結合)
- 라. 스탬프 결합 (スタンプ結合)
해설: 단순 변수만 넘기면 데이터 결합이지만, 배열이나 구조체 같은 덩어리를 통째로 넘기면 도장(Stamp) 찍듯 넘긴다고 하여 '스탬프 결합'이라고 부릅니다.
- 가. 트랜잭션 분할
- 나. STS 분할
- 다. 공통 기능 분할
- 라. 잭슨(Jackson) 분할
해설: 입력(Source), 변환/처리(Transform), 출력(Sink)의 첫 글자를 딴 것이 바로 STS 분할입니다. 데이터의 흐름을 중심으로 설계하는 가장 기본적인 분할 기법입니다.
- 가. 논리적 강도
- 나. 정보적 강도
- 다. 절차적 강도
- 라. 암합적 강도
해설: 아무 연관 없이 우연히(암합적) 묶여 있는 상태가 바로 '암합적 강도(暗合的強度)'입니다. 강도 중에서 가장 약하고 유지보수가 불가능에 가까운 최악의 상태입니다. (암호 강도로 착각하지 않도록 주의!)
'응용정보기술자' 카테고리의 다른 글
| 응용정보기술자 합격 치트키: 단위 테스트와 결합 테스트 완벽 요약 (0) | 2026.05.06 |
|---|---|
| 응용정보기술자 시험으로 다시 짚어보는 객체지향(OOP)의 본질 (0) | 2026.04.19 |