"-더니" relates a new fact based on another, where one can be the cause or an opposing circumstance of the other.
It's a subtle, rather advanced expression with no closely matching one in English.
-더니 always involves the past, but the verb is often not in the past form.
It's usages are divided into three categories according to the Naver dictionary.
1. loose cause and effect. But it's not as direct as 때문에, -기에, or -라서. (날씨가 무덥더니 비가 온다)
2. loose contrast between two situations. (날씨가 그렇게 덥더니 오늘은 선선하다)
3. introduce a new fact of a furthered state, contrasting it with an existing one. (날씨가 춥더니 얼음까지 얼었다)
Given "AA-더니, BB-이다", both the dependent(AA) and main(BB) clause can be in the present or past tense.
The main clause's tense reflects the outcome, as you would normally say it in any statement.
The dependent clause is more subtle - it hinges on whether it involves the speaker's conscious intention or not.
The past tense in -더니 clause indicates a consciously made action by the first person "I".
If it's about an observed fact or something about oneself that is out of one's control, the present tense is used.
Examples:
1A. 친구는 공부를 열심히 하더니 시험에 합격했다.
1B. 공부를 열심히 했더니 시험이 어렵지 않더라.
1C. 동생은 밥을 많이 먹더니 쓰러져 잔다.
1D. 밥을 많이 먹었더니 졸렸다.
2A. 애들이 방금 전까지 잘 놀더니 이젠 싸우고 있다.
2B. 전에는 30분 동안 뛰어도 괜찮더니 이젠 몸에 부친다.
3A. 경기가 안 좋더니 이제 불황 수준이다.
3B. 머리가 아픈 것 같더니 이젠 지끈거린다.
- 1A: "I" observe a friend's action(he worked hard), so the present is used to express an observation.
- 1B: "I" acted with an intention(I worked hard),, so -았더니.
- 1C: 동생 ate a lot, an observation.
- 1D: I ate a lot, a consciously intended action, so -았/었..
And the same goes for the rest.
The past form -았/었더니 is only possible in the #1 cause-and-effect cases because #2 and #3 are about observations.
So in -더니 clauses, the present and the past tenses take on a special connotation than in other contexts.
-더니 also has an unrelated usage as a sentence ending.