개인사업자로 IT프리랜서 일을 하면서 매 분기 부가세를 납부 때마다 어떤 것이 공제되고 어느것은 불공제인지 헷갈린다
그래서 정리해보았다.
일단, 부가세 ( 서비스 제공자입장) 의 개념
고객이 나에게 100 이란 비용을 주기로 하면 나는 그에 해당하는 용역/서비스를 제공하는 계약을 한다. 이때 부가세는 10 이되고 (비용의 10%) 최종적으로 고객으로부터 110 을 받음
부가세 납부하는 날 (년 2회, 1월/7월)이 되면, 사업관련 매입비용을 공제 처리하고 나머지를 납부함.
예를 들어, 2024년 1월에 부가세 납부를 하게 된다고 치면...
지난 6개월간(2023.07~2023.12) 받은 부가세에서 공제금액을 제한 것을 납부하는데, 그것은 아래와 같다.
부가세납부금액 = (10 * 6 ) - 매입세액 중 공제금액
매번 헷갈리지만 부가세 공제가 되지 않는 항목들은 아래와 같다.
부가세 불공제 항목
- 자동차의 구입ㆍ임차 및 유지에 관련된 지출 - 접대비 관련 지출 - 업무 관련 항공, 철도 운임 등 호텔 등의 숙박의 경우는 업무관련의 경우 매입세액 공제에 해당 - 공연ㆍ놀이동산 입장권, 목욕, 이발, 미용업및 성형수술 진료관련 이용요금 - 인건비 (종소세 신고시 비용으로 반영) - 폐업/간이과세/면세사업자로부터 매입한 내역 - 사업자 등록 전 매입세액 - 세금계산서 미수취 또는 부실기재에 대한 매입세액 - 국외 사용액
부가세 공제 항목
그렇다면 어떤것이 공제가 되는가 ...?
홈택스에는 '사업과 직접적으로 연관이 있는 비용' 이라고 명시되어 있다.
그 판단은 사업자 본인이 가장 잘 할수 있을 것이다.
IT프리랜서인 나의 기준으로 직접적인 연관있는 비용은 아래정도가 생각난다.
- 업무용 노트북
- 업무용 사무기기 (마우스, 키보드 등)
- 업무관련 SW
+ 사업장과 관련된 공과금 (전기/통신 등)
* 내글은 재미로 보시거나 참고만 하시고 각자의 케이스는 최종적으로는 세무사를 통해서 확인을 하시길 바랍니다.
lee@mysql-m:~$ lee@mysql-m:~$ mysql_config_editor print --all lee@mysql-m:~$ lee@mysql-m:~$ mysql_config_editor set --login-path=rootconn --host=localhost --user=root --password Enter password: lee@mysql-m:~$ lee@mysql-m:~$ lee@mysql-m:~$ ls -al 합계 48 drwxr-xr-x 6 lee lee 4096 1월 16 21:43 . drwxr-xr-x 3 root root 4096 1월 13 01:00 .. -rw------- 1 lee lee 106 1월 14 19:46 .Xauthority -rw------- 1 lee lee 1416 1월 16 17:57 .bash_history -rw-r--r-- 1 lee lee 220 1월 13 01:00 .bash_logout -rw-r--r-- 1 lee lee 3771 1월 13 01:00 .bashrc drwx------ 11 lee lee 4096 1월 13 01:29 .cache drwx------ 11 lee lee 4096 1월 14 18:21 .config drwx------ 3 lee lee 4096 1월 13 01:14 .gnupg drwxr-xr-x 3 lee lee 4096 1월 13 01:14 .local -rw------- 1 lee lee 136 1월 16 21:44 .mylogin.cnf lee@mysql-m:~$ mysql_config_editor print --all [rootconn] user = "root" password = ***** host = "localhost" lee@mysql-m:~$
mysql_config_editor 명령으로 credential 을 생성하면 유저 홈 디렉토리에 ".mylogin.cnf" 파일이 생성이 된다.
이후부터는 mysql 로긴시 패스워드를 입력할 필요없이 login-path 옵션을 붙여주면 된다.
2-2) Replication 유저 생성 @master sudo mysql -u root -p1111
-- slave ip 로 생성한다. CREATE USER 'REP_ADM'@'192.168.56.102' IDENTIFIED WITH mysql_native_password BY '1111'; GRANT REPLICATION SLAVE ON *.* TO 'REP_ADM'@' 192.168.56.102';
SHOW MASTER STATUS;
File, Position 값을 확인
@slave sudo mysql -u root -p1111
-- master IP 를 넣는다 CHANGE MASTER TO MASTER_HOST='192.168.56.101', MASTER_USER='REP_ADM', MASTER_PASSWORD='1111', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=2391;
START SLAVE;
SHOW SLAVE STATUS \G => [ERROR] : equal MySQL server UUIDs
sudo rm -rf /var/lib/mysql/auto.cnf sudo service mysql restart
START SLAVE;
3) Replicatin 연결 확인
-- 복제확인 sudo mysql --login-path=rootconn -e 'show slave status \G'|egrep "Master_Host|Master_User|Master_Log_File|Master_Log_Pos|ReplicateIgnore_DB|Running|IO_Err|SQL_Err|Seconds_Behind_Master|SQL_Delay"
** 아래 메세지가 보여야 정상 복제중 Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
-- 에러확인 show variables like '%log_error%'; => tail -100f /var/log/mysql/error.log
4) Replication 에러 메시지별 대응
[ERROR] [MY-013117] [Repl] Replica I/O for channel '': Fatal error: The replica I/O thread stops because source and replica have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: MY-013117 => VM 을 복제하면서 동일 uuid 문제 => auto.cnf 삭제
[ERROR] [MY-013124] [Repl] Replica SQL for channel '': Replica failed to initialize applier metadata structure from the repository, Error_code: MY-013124 => slave 를 리셋해준다. stop slave; reset slave; stop slave;
[ERROR] [MY-010584] [Repl] Replica I/O for channel '': Error connecting to source 'REP_ADM@192.17.7.5:3306'. This was attempt 1/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061 => rep user error : Authentication 확인 => mysql.user 의 plugin 확인 후 변경 => WITH mysql_native_password
[ERROR] [MY-010584] [Repl] Replica SQL for channel '': Worker 1 failed executing transaction 'ANONYMOUS' at source log mysql-bin.000003, end_log_pos 342; Error 'Can't create database 'test'; database exists' on query. Default database: 'test'. Query: 'create database test', Error_code: MY-001007 => 트랜잭션 실패 : 대상 object 가 존재하지 않거나 실행할수 없어서 발생. skip 또는 object 동일하게 만들고 slave 재시작
** 트랜잭션 실패로 인한 에러메세지가 아는 내용이고 굳이 적용할 필요 없으면 아래명령으로 skip 한다. stop slave; set global sql_slave_skip_counter=1; -- skip 할 error 갯수 start slave; show slave status\G
우리가 많이 사용하는 RDBMS 의 'R' 은 Relational 이라는 관계형을 의미한다. 데이터를 테이블형태로 구조화 하여 사용하는 것이 특징이고, 테이블과 테이블에는 관계라는 것을 설정할수있다 관계라는 것은 내가 어디에서 왔는가를 의미한다. 조인과는 다른 개념이다. 나와 1촌인 부모-자식 에만 관심이 있고, 할아버지-손자 의 관계는 관심이 없다. 부모없는 자식, 아버지와 할아버지가 같은 모델은 잘못된 모델이다.
2. 관계의 구현
데이터모델링에서 관계라는 것은 논리적인 표현이고, 결국 관계란 자식의 컬럼으로 표현되며, 물리적으로 이를 구현한 형태가 외래키 (FK) 이다.
요즘은 참조 제약조건을 DBMS 단의 FK 로 구현하지 않는 추세인데, 이유는 아래정도가 있다.
- 개발 편의성 이관작업시 데이터 선후 관계를 고려해야함. ogg는 데이터간의 관계를 따지지 않기때문에 일시적 오류 가능성 - lock 의 전이, 데드락 발생 가능성
정말 필수적인 테이블에만 일부 FK를 생성해서 운영하곤 한다. dbms 단에서 제약조건을 처리하지 않는것이지, 아예 참조제약조건을 무시하는 것이 아니다. application 레벨에서 참조 제약조건을 수행하는 로직을 추가해야 한다.
논리모델에서는 관계를 표현해야 하지만 물리모델에서 FK 를 생성하는 가는 전략적 문제이다. 다만 FK 를 생성하지 않으니 논리모델에서 관계를 생략하는 것은 덜 완성된 모델이다.
* 관계가 생략될수 있는 경우 - 기준엔터티 환율엔터티의 경우, - 가공엔터티
- 외부엔터티 외부의 시스템의 참조하는 경우
3. 속성과 관계 누락 속성은 있지만 관계가 안그려진것 -> 속성을 보고 관계가 누락된것을 발견할수 있으니 불행 중 다행 속성표현X, 관계는 그려진 경우 -> 존재하지 않음 관계없는데 관계가 그려진 경우
4. 식별/비식별 관계
관계는 부모의 식별자를 물려받는 것. 이때 부모의 식별자가 자식의 식별자에 포함이 되면 식별관계가 되고, 부모-자식 간 강한 종속성이 나타남. (부모없는 자식x) 반면, 부모의 식별자가 자식의 일반속성으로 가게되면 부모-자식간의 약한 종속성이 나타나고 부모와 독립적으로 존재할수 있다.
* 유의 사항 - 부모의 일부만 물려받지 않는다. - 부모의 속성을 물려받지 않는다.
6. 관계의 단절 필요성
조상이 많은 경우 계속해서 식별관계로 그릴경우 식별자가 비대해진다. 이런 모델에서 조인을 걸 경우 SQL 이 복잡해지는 단점이 있다. 이때 인조식별자를 만들어 비식별 관계로 만드는 것을 고려한다. 자식이 많을 경우에도 고려할수 있다.